- 这里的每个 x 1 , x 2 . . . x_1,x_2... x1,x2... 应该写成 x i 1 , x i 2 x_{i1},x_{i2} xi1,xi2 也就是表示的特征的值,而不是样本的值。
- 根据计算, w 1 , w 3 w_1,w_3 w1,w3 下降的幅度比 w 2 w_2 w2 大很多,因为他们的 特征值 x i j x_{ij} xij 比较大
- 一共有四个训练样本 i = 1...4 i=1...4 i=1...4,每个训练样本的特征数量是 j = 1 , 2 j=1,2 j=1,2 两个
- 计算 y ^ i \hat{y}_i y^i 的公式在左下角,通过参数和样本向量的加权求和,通过激活函数后得到
- 通过 y i , y ^ i y_i, \hat{y}_i yi,y^i 我们可以计算出误差,并通过梯度下降公式来计算每个特征的参数应该如何更新
- 对于 偏置 b b b ,我们始终把它看成是参数向量 w ⃗ \vec{w} w 中的第一个参数 w 0 w_0 w0,统一进行梯度更新求算;我们规定 x i 0 x_{i0} xi0 始终为 1.
- 在进行迭代之前需要给出一个初始化的参数向量,即 w ⃗ = { b , w 1 , w 2 } = { 0 , 0 , 0 } \vec{w}=\{b,w_1,w_2\}=\{0,0,0\} w={b,w1,w2}={0,0,0}
- 第一个 epoch 中:
- 前两个样本的预测值和实际值相同,因此不需要梯度更新
- 第三个样本产生了误差,因此根据梯度更新公式,参数的值被更新成 w ⃗ = { b , w 1 , w 2 } = { − 1 , 0 , 0 } \vec{w}=\{b,w_1,w_2\}=\{-1,0,0\} w={b,w1,w2}={−1,0,0}
- 根据更新后的参数我们计算最后一个样本,发现没有误差,第一个 epoch 中所有的样本都执行了一遍,因此第一个 epoch 结束:
- 第二个 epoch
- 第一个样本就需要进行梯度更新, w j = w j + x i j w_j=w_j+x_{ij} wj=wj+xij 所以 w ⃗ \vec{w} w 被更新成 { − 1 + 1 , 0 + 1 , 0 + 1 } = { 0 , 1 , 1 } \{-1+1, 0+1, 0+1\} = \{0,1,1\} {−1+1,0+1,0+1}={0,1,1}
- 第二个样本是正确的,不需要更新
- 第三个样本又产生了误差,需要梯度更新 w j = w j − x i j w_j=w_j-x_{ij} wj=wj−xij w ⃗ \vec{w} w 被更新成 { 0 − 1 , 1 − 0 , 1 − 0 } = { − 1 , 1 , 1 } \{0-1, 1-0, 1-0\} = \{-1,1,1\} {0−1,1−0,1−0}={−1,1,1}
- 第四个样本不需要梯度更新
- epoch2 结束
- 第三个 epoch:
- 所有样本都没有发生梯度更新,这个模型已经收敛,因此不需要进行新的 epoch。迭代结束。
激活函数的作用一方面将加权求和后的信号进行归一化到 [ 0 , 1 ] [0,1] [0,1] 之间,另外一方面可以帮助 多层的感知机模型 获得非线性分类的能力。
对于感知机自身的激活函数:
这只能对线性可分的数据有一个较好的拟合结果,因为他本身基于的是线性假设,求解的总是一个 w ⃗ ⋅ x i ⃗ + b \vec{w}\cdot \vec{x_i}+b w⋅xi+b 的线性方程。
感知机也不能保证分类数据有最大的决策边界(那是 svm 模型的任务)
感知机更不能够保证对非线性可分(non-linearly separable)数据拟合的很好。
感知机本质上是基于线性假设,如果把激活函数改成 sigmoid 函数,那么感知机就可以成为一个逻辑回归模型
多层感知机有三个部分组成:
输入层的神经元的数量取决于输入样本的特征数
输出层的神经元数量取决于分类任务或者是回归任务。
隐藏层可以有很多层,图中只画了一层。每个隐藏层存在的意义都是对输入进行重新编码,编码成抽象的向量,然后输出给后面的层。
例如我们具有一个三层的感知机:一个输入层,一个输出层和一个隐藏层,三个层的参数矩阵我们分别用
w
L
0
,
w
L
1
,
w
L
2
\textbf{w}_{L_0}, \textbf{w}_{L_1}, \textbf{w}_{L_2}
wL0,wL1,wL2 表示。那么一个输入
x
i
x_i
xi 经过整个网络的过程可以表示成:
其中 f f f 都是非线性的激活函数
非常清楚,这个式子可以拟合一个复杂的非线性函数。
作为对比,如果不采用任何非线性函数,只是使用上述的三层感知机,那么这个过程可以表示成:
通过最后的化简,这还是一个线性的函数,换句话说,还是只能处理线性可分的数据集。
因此我们说多层感知机必须搭配非线性的激活函数才能具有强大的非线性拟合能力。
因为多层感知机有拟合复杂数据的能力,那么他就一定比线性模型的表现更好么?
因为神经网络可以在隐藏层学习到他们自己的表示(representation)因此,他们不需要任何特征工程。