深度学习入门-1(线性回归,Softmax与分类模型,多层感知机)
一、线性回归
1、基本形式
线性回归是单层线性网络,定义如下:
单层线性网络图如下:
2、损失函数
在模型训练中,我们需要衡量网络输出与实际输出之间的误差。通常我们会选取一个非负数作为误差,且数值越小表示误差越小。一个常用的选择是平方函数。 它在评估索引为 i 的样本误差的表达式为
3、优化函数
优化函数有多种,此处使用最常用的随机梯度下降,优化函数实际就是通过在负梯度方向移动参数来更新每个参数。
4、训练步骤
线性回归模型训练步骤:
- 加载数据,初始化模型参数(一般来说使用随机初始化)
- 输入训练数据,通过模型得到网络输出
- 对比网络输出与真实输出(使用损失函数计算误差)
- 使用优化函数修正权值与偏置
- 在数据上迭代多次,得到训练好的模型
二、softmax和分类模型
1、softmax的引入与基本形式
线性回归与softmax都是单层网络模型,线性回归用来处理连续型数据,softmax用来处理离散值,常用作分类问题。但由于分类问题的输出常为各个类别的概率(如下图所示,O1,O2,O3为类别1,2,3的概率)。
由于分类模型标签为离散值,导致输出值范围不确定,且误差难以衡量,因此引入softmax运算符,将输出值变为正且和为1的概率分布,softmax操作定义为:
例:
另外由于
因此softmax运算不改变预测类别输出。
在加入softmax运算后的运算变为下面公式,即先进行线性变换,再使用softmax运算符修改输出即可。
2、损失函数
在分类模型中,想要预测分类结果正确,并不需要预测概率完全等于标签概率,只要预测值是所有预测值中最大即可(例如三个输出为0.2,0.3,0.5和0.1,0.1,0.8,损失相差很大,但分类结果都正确),因此平方损失则过于严格。实际上衡量两个概率分布差异的测量函数,交叉熵(cross entropy)是一个常用的衡量方法,假设训练数据集的样本数为n,交叉熵损失函数定义为
三、多层感知机
1、引入与基本形式
为了能表示更多的规律,可在线性模型的基础上,再增加若干隐藏层,扩展成多层网络结构,同时为了跳出线性变换,再增加一个激活函数,使其变为拥有多层结构的非线性模型。
含有一层隐含层的多层感知机神经网络图:
输出计算公式:
2、激活函数
如果不增加激活函数,那么无论增加多少隐含层都还依旧是线性变换,,上述问题的根源在于全连接层只是对数据做仿射变换(affine transformation),而多个仿射变换的叠加仍然是一个仿射变换。解决问题的一个方法是引入非线性变换,例如对隐藏变量使用按元素运算的非线性函数进行变换,然后再作为下一个全连接层的输入。这个非线性函数被称为激活函数(activation function)。常用的激活函数有以下三种:
- ReLU函数
ReLU(rectified linear unit)函数提供了一个很简单的非线性变换。给定元素,该函数定义为:
函数图像为:
导数图像:
- Sigmoid函数
sigmoid函数可以将元素的值变换到0和1之间,该函数定义为:
函数图像:
sigmoid函数的导数公式如下,当输入为0时,sigmoid函数的导数达到最大值0.25;当输入越偏离0时,sigmoid函数的导数越接近0。
导数图像:
- tanh函数
tanh(双曲正切)函数可以将元素的值变换到-1和1之间,该函数定义为:
函数图像:
tanh函数的导数公式:
导数图像:
关于激活函数的选择
ReLu函数是一个通用的激活函数,目前在大多数情况下使用。但是,ReLU函数只能在隐藏层中使用。
用于分类器时,sigmoid函数及其组合通常效果更好。由于梯度消失问题,有时要避免使用sigmoid和tanh函数。
在神经网络层数较多的时候,最好使用ReLu函数,ReLu函数比较简单计算量少,而sigmoid和tanh函数计算量大很多。
在选择激活函数的时候可以先选用ReLu函数如果效果不理想可以尝试其他激活函数。