- F(x)构建方程 ,
- 梯度下降求偏导,
- 损失函数确定偏导调整,
- 激活函数处理非线性问题
F(x)构建方程 28*28 就是784个参数构建的方程;
构建的方程是基于图像的矩阵
梯度下降求偏导进行参数调优
《一个人工智能的诞生》EP06 - 梯度下降_哔哩哔哩_bilibili
多维度计算多个偏导数的模;
向量的模的计算公式:空间向量模长是²√x²+y²+z²;平面向量模长是²√x²+y²。 向量的模公式 空间向量(x,y,z),其中x,y,z分别是三轴上的坐标,模长是:²√x²+y²+z² ;平面向量(x,y),模长是:²√x²+y²。向量的大小,也就是向量的长度(或称模)。向量a的模记作|a|。模是绝对值在二维和三维空间的推广,可以认为就是向量的长度。推广到高维空间中称为范数。
可视化链式法则
损失函数
通过损失函数求解进行模型评估
损失函数(loss function)或代价函数(cost function)是将随机事件或其有关随机变量的取值映射为非负实数以表示该随机事件的“风险”或“损失”的函数。
在应用中,损失函数通常作为学习准则与优化问题相联系,即通过最小化损失函数求解和评估模型。
常见损失函数
- 交叉熵损失函数
- 0-1损失函数
- 平方损失函数(线性回归:最小二乘法)
损失函数:均方误和交叉熵
一、均方误差函数:
其中,t是真实标签,y是网络预测值。
然后我们将其对权重w求导:
发现它的变化与激活函数的导数有关系,也就是激活函数梯度f'(z)越大,w的大小调整得越快,训练收敛越快。反之,f'(z)越小,w的大小调整得越慢,训练收敛越慢。
以一个二分类问题为例,进行两组实验。
在上图两点中,0.98距离0差距较大但是它的梯度(斜率)趋于零,根据我们上面的分析,也就是说它调整的慢(收敛慢),同样0.82相比0.98来说与零相差小,但是它的梯度很大,所以它的收敛快。
下图是基于两点的loss变化图:
我们可以根据上图中绿色线(梯度斜率)变化大致画出来
我们可以根据上图中红色线(梯度斜率)变化大致画出来
所以在这里就产生了一个矛盾,当误差较大时我们希望它调整的大一些,加快收敛。但是如上述的0.98处一样,误差大但是变化率小,收敛的比慢。0.82位置误差相对小但是权值调整速度比较快,因此就有了交叉熵函数。
二、交叉熵函数:
同样我们对其w求导:
其中呢,
也就是
所以我们发现交叉熵函数w的调整与(y-t)相关,就是与网络误差值正相关,误差越大,调整越大,收敛越快,这是我们想要的。
三、结论
回归用均方误差,分类用交叉熵。
四、实验证明
在MNIST数据集上经过5个epoch来做对比,很明显交叉熵的收敛速度较快。
激活函数的作用
处理线性不可分问题,解决非线性的问题
1.为何引入非线性的激活函数?
如果不用激活函数,在这种情况下每一层输出都是上层输入的线性函数。容易验证,无论神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,这种情况就是最原始的感知机(Perceptron)了。因此引入非线性函数作为激活函数,这样深层神经网络就有意义了(不再是输入的线性组合,可以逼近任意函数)。最早的想法是sigmoid函数或者tanh函数,输出有界,很容易充当下一层输入。
引入ReLu的原因
第一,采用sigmoid等函数,算激活函数时(指数运算),计算量大,反向传播求误差梯度时,求导涉及除法,计算量相对大,而采用Relu激活函数,整个过程的计算量节省很多。
第二,对于深层网络,sigmoid函数反向传播时,很容易就会出现 梯度消失 的情况(在sigmoid接近饱和区时,变换太缓慢,导数趋于0,这种情况会造成信息丢失),从而无法完成深层网络的训练。
第三,ReLu会使一部分神经元的输出为0,这样就造成了 网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生