您的位置:首页 > 理论基础 > 计算机网络

神经网络初步

2020-06-30 22:35 62 查看

写在前面

这个笔记记录了激活函数,梯度求解,反向传播算法。
主要是讲了反向传播算法,这个算法传播的是误差,从后往前计算。

目录

  • 神经网络的介绍
  • 二、反向传播重点
  • 三、反向传播算法【核心】
  • 四、神经网络的调参
  • 总结
  • 第一课:神经网络初步与调参技巧

    神经网络和深度学习的动机

    深度学习的任务:给定大量数据,自动地学习有层次的特征。

    一、线性分类器:数据D维 映射到 K类

    需要一个K*D矩阵W,再加上一个bias b W*D+b=K

    向量点积:表征相似度,cos 相似度。
    Wx + b = f
    矩阵每一行表示输入x的每个维度的 权重
    比如,将输入图片转化为特征向量x, x的维度为D;需要将照片分为猫狗轮船等等K类;KD的权重矩阵W
    W*x + b = f 所以输出的f哪一个维度的值大,表明结果对;如果结果不对,主要是W不准确。

    二、Softmax

    上面得到的f是个score,我们要将这个score转化为概率分布的形式y;即我们要将f转为值在0-1的概率分布

    三、 交叉熵损失函数 Cross-Entropy Loss

    W*x + b = f; f——>y
    (xi , yi )是一组训练例子,xi∈RD 是一个 D维的训练数据, yi∈RK 是一个向量,是真实值,K维, 向量中只有一个1,对应true class 的索引;
    假设y^\hat{y}y^​i∈RK 是 after Softmax 计算出来的预测值,则cross-entropy loss为:
    Li = - yi · log( y^\hat{y}y^​i )

    损失函数的参数永远只有两个——算法的预测值真实值
    比如要为一张图片分为3类,y的三维分别为cat、dog、ship;一张图片为dog;则真实值y=[0,1,0);

    1. 加入预测值为
      y^\hat{y}y^​=[0.9,0.1,0]; 根据Li = -yi · log( y^\hat{y}y^​i )得到1;
    2. 若加入预测值为
      y^\hat{y}y^​=[0,0.9,0.1]; 根据Li = -yi · log( y^\hat{y}y^​i )得到-1*log(0.9)<1;
      显然情况2的结果 y^\hat{y}y^​ 更准确,所以其损失函数越小

    预测对了,损失函数越小

    四、 Hinge Loss 折页损失

    注意到cross-entropy loss需要Softmax,即需要指数计算,计算量太大,而且有时候我们只需要得到分数f,不需要概率y
    因此,Hinge Loss解决了这个问题

    1. 先不考虑△\bigtriangleup△
      把真实类yi即W中对应真实类别的那一行的分数 与 其他所有类 的分数作比较;
      当真实类yi的分数 比 其他所有类 的分数 都大,即真实类的分数最大,则损失函数为0;
    2. △\bigtriangleup△是什么,避免真实类的分数与某一类太相近,设置一个margin,即余裕;

    Hinge Loss里面的分数都是计算出来的,没有真实值,其中 yiy_iyi​ 对应的是 真实情况对应的W的那一行的计算

    五、 Regularization正则化

    正则化是为了防止model learning过拟合;选择简单的W

    L2 Norm是最常见的正则化

    六、 计算梯度


    **Li 是一个标量 ,标量对向量求导,结果是一个向量向量函数的求导问题

    wj 是指除了正确类别所在的yi那一行权重。

    Li是个关于w和x的标量函数,是针对计算出来的类别向量中的第i维,要计算这个第i维的损失函数结果。和wyi指的是同一行。

    假设有三类,Li则由两个max()计算结果加起来,包含wyi两次

    公式中的1是一个函数,当()中的值小于0取0,大于0的时候取自身。

    这个公式与上一个公式相比少了求和符号,因为,Li对于某一个wj(j≠wi),只包括一次。

    xi是一个向量, 这样计算结果也是一个向量,维数和xi一样,也即和wj一样。

    七、优化

    神经网络的介绍

    一、 前向传递
    1. 神经元的作用:做非线性变换
    2. z=Wx+b;
      激活函数a=σ(z);做的非线性变换
    **目标函数(Objective Function)=损失函数(Loss Function)=代价函数(Cost Function)

    假如使用Hinge Loss作为目标函数

    二、反向传播重点


    l 指第l层,即;
    k 是前面神经元的index,即是输入权重的第几维;
    j 是后面神经元的index, 即计算输出的第几维;

    结论

    三、反向传播算法【核心】
    • x是神经网络的输入
    • s是神经网络的输出
    • 第k层 的 第j个神经元输入标量 z, 产生激活输出 a;
    • 输入层 x = z = a; 即不考虑权重和激活函数;
    • W是转换/权重矩阵,将第k层的激活输出ak 映射到 第(k+1)层输入zk+1;
    • Important: δ(k)j是在 z(k)j处的反向传播误差,计算公式:
      δ\deltaδj(k) = ∂J∂zj(k)\frac{\partial J} { \partial z^{(k)}_j }∂zj(k)​∂J​
    • 经过非线性变换之前的是z------经过非线性变换之后的是a
    **计算

    至此,我们可以将Loss Function J 对 权重矩阵 W的梯度写成 误差δ\deltaδ 和 激活后的 a 的乘积;
    传播的是误差 δ\deltaδ , 是由后向前计算的;



    反向传播的梯度仅仅受它们贡献的值影响

    神经网络的正则化 - Dropout

    1. 训练:在整个神经网络中采样一个子网络
    2. 测试:without dropout 所有子网络的ensembles
    四、神经网络的调参
    1. Loss-Iteration

      长尾分布:
      调学习率----先调大后调小,这样让一开始loss下降快,后来再精细调整;
      调batch size----调大,减小振荡;
    2. Training accuracy-Epoch

      training accuracy 和 validation accuracy 之间没有 gap—欠拟合
      增加训练数据集;
      或者采用数据扩增技术;

    总结

    线性分类器:W权重就是世界观;
    神经网络:Loss Function JW 的梯度;
    反向传播;

    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: