# Нейрончики
Вроде как, в нашей лабе мы рассматриваем нейронные __сети прямого распространения__ ( СПР ).
## Нейронная сеть в общем ввиде

## Как работает нейрон

__Активация нейрона:__ $h = \sum_{i=1}^n w_ix_i - b$
__Выход нейрона:__ $y = f( h )$, где $f$ -- функция активации
## Гиперпараметры нейронной сети
### Слои
#### Layers

Буквально число скрытых слоев т.е. число групп последовательно соединенных нейронов, кроме входного и выходного.

### Функция потерь
#### Loss function
Это функция, частная производная значения которой используются в backpropagation при корректировке весов нейронов.
$$ \delta_i = \frac{\partial Loss}{\partial h_i }( h_i ) = \frac{\partial Loss}{\partial y_i}\frac{\partial y_i}{\partial h_i}( h_i ) = \frac{\partial Loss}{\partial y_i}\frac{df(h_i))}{dh_i}( h_i ) $$

+ Binary crossentropy: $$ \log Loss = -\frac{1}{n}\sum^n_i( y_i\log[ p(y_i) ] + ( 1 - y_i )\log[ 1 - p(y_i) ] ) $$
+ Mean absolute devitaion: $$ Loss = \frac{1}{n}\sum^n_i | y_i - \hat y_i | $$
+ Standard deviation: $$ Loss = \sqrt{ \sum^n_i ( y_i - \hat y_i )^2 p( y_i ) } $$
+ Categorical Crossenthropy: $$Loss = -\sum^n_i y_i\cdot\log\hat y_i$$
### Размер партии
#### Batch size

Число примеров данных в одной партии. В ходе одной эпохи нейронной сети скармливается весь датасет, но порционно ( партийно ), причем эти порции наполняются случайными данными из датасета и вкупе формируют весь датасет. Таким образом, за одну эпоху мы скармливаем нейросети весь датасет.
## Регуляризаторы
__Регуляризаторы__ -- это один из способов предотвращения __переобучения ( overfitting )__ нейронной сети.
`P.S. о переобучении будет сказано дальше`
`P.P.S. далее одинарная кавычка не символ взятия производной`
### L1-Регуляризатор
#### Regularization L1
$L_1$ -- регуляризация (англ. lasso regression), или регуляризация через __манхэттенское расстояние__:
$$L_1 = \lambda\sum_i |w_i|\\ Loss' = Loss + L1$$
### L2-Регуляризатор
#### Regularization L2
$L_2$ -- регуляризация, или __регуляризация Тихонова__ (в англоязычной литературе — ridge regression или Tikhonov regularization), для _интегральных уравнений_ позволяет балансировать между соответствием данным и маленькой нормой решения:
$$L_2 = \lambda\sum_i w^2_i\\ Loss' = Loss + L_2$$
#### Итоговый Loss
Итого значение функции потерь с применением регуляризаторов $L_1$ и $L_2$:
$$Loss' = Loss + L_1 + L_2$$
### Скорость ( Темпы ) обучения
#### Learning rate
Коэффициент $\alpha$, на который домножается итоговая корректировка веса.
$$w_i = w_i - \alpha\frac{\partial Loss}{\partial h_i}( h_i )$$

### Функции активации
#### Activation function

+ softmax: $f(h_i) = \frac{e^{h_i}}{\sum^n_j e^{h_j}}$
+ relu: $f(h) = max( 0, h )$
+ tahn: $f(h) = \frac{e^h - e^{-h}}{e^h + e^{-h}}$
+ sigmoid: $f(h) = \frac{1}{1+e^{-h}}$
+ linear: $f(h) = h$
### Число эпох
#### Epoch Count

Число циклов обучения нейронной сети.

### Число нейронов в слое
#### Neurons count in layer


## Переобучение
### Overfitting
Это явление, при котором неройнная сеть выдает точные данные, но только на тренировачных данных, т.е. по сути не "обобщает" решение, а "запоминает" решения для конкретных входных данных. Есть несколько методов предотвращения переобучения
+ __Регуляризация__ -- описана выше
+ __Dropout__ -- на каждой итерации с определенным шансом зануляем вес нескольких нейронов, таким образом, мы обучаем несколько нейросетей, состоящих из подмножества нейронов исходной нейросети.