y=h(b+w1X1+w2X2) h,w...统称为参数----训练集计算loss函数,然后梯度下降求得
感知机的激活函数为阶跃函数)
激活函数(连接感知机和神经网络的桥梁):
回归问题------->恒等函数
分类问题------->softmax函数
为了发挥叠加层的优势,神经网络的激活函数必须为非线性函数,如果是线性函数的话,一层就能搞定
常用的激活函数
1、sigmoid函数
2、relu函数
3、softmax函数
4、恒等函数
输出层前的神经元传来的数值原封不动传出
输出层的激活函数,由求解问题的性质决定。
一般,回归问题可用恒等函数
二元分类问题可用sigmoid函数
多元分类问题可用softmax函数
batch处理的意义:
打包式的输入数据,当数据传送成为瓶颈时,批处理可以减轻数据总线的负荷
loss function一般有两种:
1、均方误差 square error
2、交叉熵误差cross entropy
mini batch
如果要求所有数据的损失函数的总和,会耗费大量时间,因此,从全部训练数据中选出一部分(称为mini-batch),作为全部数据的“近似”,然后对每个mini-batch进行学习
根据mini batch训练集更新也成随机梯度下降SGD
学习算法的实现:
步骤1(mini batch)
从训练数据中随机选出一部分数据,这部分数据称为mini batch
步骤2(计算梯度)
步骤3(更新参数)
将权重参数沿着梯度方向进行微小更新
步骤4(重复)
重复步骤1,2,3
误差反向传播
计算损失函数比较浪费时间,误差反向传播可以高效计算权重参数
反向传播的目的:在gradient descent的时候,由于参数通常有很多,所以计算loss函数对各个参数求偏导时工作量比较大,用误差反向传播方法会更加高效计算。
首先 需要了解 求导的链式法则
backpropagation要求出所有单条loss c的总和对各个参数Wx 的偏导数
根据链式法则,C对W的偏导为C对Z求偏导,再与Z对W求偏导相乘(Z是中间某层在激活函数前的input)
forward pass很容易求
难的是backward pass
在这里,a是激活函数对z的output 。由于牵涉到C的运算还是很复杂,假设我们知道画问号的那两项,接着往下进行
整理一下,剩下的问题就只有计算那两项了
情况1 :z'是output layer的Input,则C对z'的偏导就为:output layer激活函数的导数Xloss function 对该z'对应output layer输出的导数,其中C对y的偏导根据不同loss function的种类而异
情况2:z'不是output layer的input--------------------->解决:把z'后续直到output layer的中间结点用前面的方法反向计算出C对z'的偏导数
反向传播的backward pass实质是建立一个反向的神经网络,从右向左,activation function就是正向activation function的导数
总结一下 反向传播的流程