深度学习笔记

深度学习理论流程
  1. 随机取(w,b)
  2. 将数据分为多个batch,这些batch称为一个epoch
  3. 根据神经网络向前计算y
    1. 向前计算:输入数据,通过(w,b)和激活函数来求解最后的输出y
    2. 两层神经网络,且每一层两个神经元的表达书如下:
    3. y=w1·φ(w11·x1+w112·x2+……+b1)+w2·φ(w21·x1+w22·x2+……+b2)+b
    4. 激活函数
      1. 激活函数是用于连接两层网络之间的非线性函数(若采用线性函数,则神经网络层数就会退化,表达能力会下降)
      2. 常用激活函数
        1. sigmod:f(x)=1/(1+e^-x)
        2. relu:f(x)=max{0,x}
        3. tanh:f(x)=(e^x-e^-x)/(e^x+e^-x )
        4. softmax:Si=e^i/Σe^j
      3. 激活函数的选择关系到了梯度的变化,会出现梯度爆炸或消失的问题,使用不慎会导致神经网络无法收敛。
  4. 选取目标函数,利用后向传播求y于Y的偏差梯度。
    1. 常用目标函数(又称损失函数,用于比较预测值和真实值直接的偏差程度)。具体内容见这里
      1. 均方差损失函数:J(w,b)=1/2N·Σ(Y-y)²
        1. y=f(z)=f(wx+b)
          1. 所以损失函数的自变量是(w,b)
        2. N是样本总数
      2. 交叉熵损失函数:J(w,b)=-1/N·ΣΣYi·logPi
        1. Pi是计算出来类别i的概率值
        2. N是样本总数
  5. 利用梯度下降法-后向传播
    1. 梯度下降法通俗来说,就是计算损失函数的导数(该导数是损失函数J对(w,b)的各个偏导数)。
    2. 后向传播算法是用来计算梯度下降的一种具体方法。
      1. 后向传播是利用各个偏导数之间的关系和链式求导法则简化导数的计算,具体见这里
    3. 得出(w,b)中每个参数的梯度(即带方向的导数,沿梯度方向,函数下降最快)
  6. 重复3-5的操作,直到该batch中各个数据都求出其对应的梯度。(w,b)中的每个参数各自的梯度取平均,然后乘上学习率α后更新(w,b)。学习力过大会欠拟合,过小会过拟合
  7. 重复3-6的操作,直到该epoch下的所有的batch都处理完毕。
  8. 重复2-6的操作,直到所有的epoch都处理完毕。
  9. 输出(w,b),(w,b)就是我们训练出来的模型。
  10. 输入test数据,然后利用(w,b)前向计算得到结果y,将真实值Y和预测值y比较评估正确率。