并不是所有的模型拟合都能够使用线性回归或者逻辑回归进行拟合的。或者说,线性回归和逻辑回归在模型上具有一定的局限性。

在不出现过拟合的前提下,模型越复杂,预测精度就越好。

 

神经网络结构

 

神经网络中iou是什么意思 神经网络f1_数据

最左侧为输入层,最右侧为输出层。中间称为隐藏层。

在回归问题上,往往输出只有一个节点。对于分类问题,往往有两个或多个节点。

神经网络中iou是什么意思 神经网络f1_权值_02

X1与X2代表自变量,b0代表偏置项。w1和w2代表自变量上的权值。a的计算如下:

神经网络中iou是什么意思 神经网络f1_权值_03

可以看到,括号里的计算是线性的,外围的f函数就是类似于sigmoid函数,用于转换成非线性的。

 

 

神经网络训练细节

 

神经网络训练的关键就是通过重复两个关键的步骤校准权重:前向传播与反向传播。

前向传播很简单,将一组权值应用于输入,计算输出即可。对于第一次前向传播,这个权重可以随机初始化。

反向传播就是将预测值与真实值之间的误差计算出来,反馈给神经网络,达到减小误差的效果。

前向传播和反向传播是重复进行的,什么时候停止?能够达到你想要的预测精度即可。

 

前向传播

 

我们来训练一个异或计算器来说明前向传播的过程。

神经网络中iou是什么意思 神经网络f1_神经网络中iou是什么意思_04

异或计算器达到的效果就是,呈现上述的输入的时候,给出对应的输出。以输入(1,1)输出0为例:

神经网络中iou是什么意思 神经网络f1_数据_05

第一次传播的时候,我们随机初始化权值(0-1之间):

神经网络中iou是什么意思 神经网络f1_神经网络中iou是什么意思_06

计算第一个隐藏层的各个节点非线性映射前的值:

神经网络中iou是什么意思 神经网络f1_数据_07

神经网络中iou是什么意思 神经网络f1_神经网络中iou是什么意思_08

将计算出的值进行非线性映射,常用的激活函数:

神经网络中iou是什么意思 神经网络f1_权重_09

这里使用sigmoid函数:

神经网络中iou是什么意思 神经网络f1_权重_10

神经网络中iou是什么意思 神经网络f1_神经网络中iou是什么意思_11

计算第三层节点的值(因为是输出层,不做非线性映射):

神经网络中iou是什么意思 神经网络f1_神经网络中iou是什么意思_12

神经网络中iou是什么意思 神经网络f1_权重_13

这里虽然是分类问题,为了简单地呈现前向传播的过程,我们使用MSE代价简化:

(1.235-0)^2

 

反向传播

 

从最后一层开始,适当调整权重,使得达到最小的误差。只要权重改变,那么误差是增加还是减少就是确定的,以此来确定权重调整的方向。

由此,我们可以做到:

1. 确定权重更新的方向(增大还是减小)

2. 确定权重需要更新的大小。

较小的学习率使得权重更新较为缓慢,模型更加稳定。

 

由前面的前向传播我们知道,MSE误差达到了1.235^2= 1.52,我们改变权重,看看权重对误差的影响方向。

将最后一层与前一隐藏层之间的0.3权值改为0.29,我们得到了1.50的误差:

神经网络中iou是什么意思 神经网络f1_数据_14

这样,我们知道,0.3这个权值,需要降低。

那么,降低多少?

神经网络中iou是什么意思 神经网络f1_数据_15

这里0.3是初始值,0.05就是学习率。

神经网络中iou是什么意思 神经网络f1_权值_16

同样的过程,计算本层其他权值:

神经网络中iou是什么意思 神经网络f1_神经网络中iou是什么意思_17

我们发现从隐藏层到输出层的权值调节,误差降低了很多,从1.52~1.06

接着,我们需要对输入层到隐藏层的权值进行调节:

神经网络中iou是什么意思 神经网络f1_权重_18

我们将重复进行上述操作,直到达到我们想要的误差。

 

随机梯度下降

 

梯度代表着差异,下降代表着降低。随机意味着并非每次更新全部的数据,而是训练数据的子集,并更新权重。

 

我们以一个例子来讲解梯度下降法:

假设我们需要拟合y= 6+5x

神经网络中iou是什么意思 神经网络f1_权值_19

我们随机初始化a和b为2和3

神经网络中iou是什么意思 神经网络f1_神经网络中iou是什么意思_20

操作如下:

1. 使用初始化的a和b计算输出,5

2. 计算基于a和b的均方误差。

3. 稍微变动a的值,计算均方误差,作为error_changed_a

4. 计算均方误差变化delta_error_a

5. 更新a的值,new_a = a_estimate+(delta_error_a)*learning_rate

6. 同样的步骤用于更新b

7. 重复整个过程,将所有的训练数据覆盖。

8. 重复上述步骤,所有的训练数据再来一次。

神经网络中iou是什么意思 神经网络f1_神经网络中iou是什么意思_21

梯度下降法完成了数据的取优,也有其他的优化器实现了同样的功能:

神经网络中iou是什么意思 神经网络f1_权重_22

 

为什么要有学习率?

 

上述的训练过程中,我们设置的学习率为0.01,如果变成0.05会怎么样?

神经网络中iou是什么意思 神经网络f1_权值_23

我们发现,学习率变成0.05以后,数据的变化有些异常,一般倾向于较小的学习率,但是会导致收敛速度变慢。

 

批量训练

 

上述的训练过程中,数据的训练都是一条一条进行的,也就是每条训练数据都会有a和b的更新,然而,批量更新可能更有效,更迅速。

神经网络中iou是什么意思 神经网络f1_神经网络中iou是什么意思_24

这里使用两条数据一次更新权重。

神经网络中iou是什么意思 神经网络f1_神经网络中iou是什么意思_25

第二次批量操作仍然是两条数据一起更新。

这就是所谓的批量更新。

实际上,批量更新的大小一般是2的指数次,最小一般取32

 

Softmax

 

上文中演示的神经网络训练的过程是一种回归,而不是分类,实际上,分类和回归类似,只不过输出层的节点数不一样。假设二分类问题,我们就会有两个输出节点。

由隐藏层到输出层的权重由原来的3*1变成了3*2矩阵。

神经网络中iou是什么意思 神经网络f1_权重_26

这是因为原来输出层节点为1,现在输出层节点为2

输出层的输出变为2维的:

神经网络中iou是什么意思 神经网络f1_权重_27

但是这里的输出不在0-1之间,超出了范围,这个时候使用softmax更科学。

 

1. 将输出值转换到e^output

神经网络中iou是什么意思 神经网络f1_数据_28

2. 将输出值归一化 3.43/ (3.43+1.81)

神经网络中iou是什么意思 神经网络f1_权值_29

3. 使用交叉熵误差代替MSE

神经网络中iou是什么意思 神经网络f1_权值_30

神经网络中iou是什么意思 神经网络f1_权重_31

4. 使用梯度下降法优化交叉熵误差。

 

目标函数

 

回归中常常使用均方误差 ,分类中常常使用交叉熵。还有一些其他的优化函数:

神经网络中iou是什么意思 神经网络f1_数据_32

神经网络中iou是什么意思 神经网络f1_数据_33