CS224n 2019 Winter 笔记(二):神经网络(矩阵求导、反向传播推导)

  • 一、交叉熵损失函数(Cross Entropy Loss Function)
  • 二、Derivative of Matrix
  • (一)矩阵的几种乘积
  • (1)点积(内积)
  • (2)点乘(hadamard product,哈达码积)
  • (3)克罗内克积(kronecker product)
  • (二)矩阵的运算
  • (1)微分运算
  • (2)点乘运算
  • (3)迹运算
  • (4)其他运算
  • (三)标量对矩阵求导
  • (四)矩阵对矩阵求导
  • (1)Jacobian Matrix
  • (2)结论
  • **1.矩阵乘以列向量,对列向量求导**
  • **2.行向量乘以矩阵,对行向量求导**
  • **3.向量对自身求导**
  • **4.向量的逐元素函数求导**
  • 三、人工神经元(Artificial Neurals)
  • 单层的神经网络
  • 多层的神经网络
  • 四、神经网络(Neural Networks)
  • (一)前馈计算
  • (二)最大间隔目标函数(Maximum margin objection function)
  • (三)反向传播
  • 1、目标函数对权重的梯度计算

2、 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导

  • 3、权重梯度的反向传播

4、神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_02 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导的传播

  • 5、偏置梯度
  • 五、Some Tips
  • Reference


笔记只记个人学习重点和难点,不追求全面,只做读书过程中的疑惑解释,既做个人心得记录,也供读者参考
如有错误,烦请留言指点,谢过!
如有错误,烦请留言指点,谢过!
如有错误,烦请留言指点,谢过!

一、交叉熵损失函数(Cross Entropy Loss Function)

神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_人工智能_04


上图表示某训练集神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_05神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_06神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_07 维的输入,神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_08

传统机器学习中的线性分类器,目的就是训练出一个能够较好将样本分类的直线(或是超平面),我们令其表达式的权重表示为神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_人工智能_09

在上一次课中提到,为了衡量样本 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_10 属于 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_08 类的概率,而用softmax函数来模拟其概率:神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_12

在线性分类器中,目标函数的优化就是为了让预测的分类 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_13 能够以1的概率接近标签值 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_14神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_15神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_16表示矩阵的行向量

所以,在这里softmax变为:神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_17其中,神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_18,这个式子也可以写成向量 $\boldsymbol{x} $ 与权重矩阵 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_人工智能_19 相乘的形式:神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_20

此外,对于每一个训练样本神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_21来说,训练的最终目的是为了最大化上述概率,等价于最小化该概率的负对数形式:神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_22

如果令真实的概率分布为神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_23,预测的概率分布为神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_24,则交叉熵定义如下:神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_25

考虑上述softmax模拟的概率,在具体的操作中,我们一般把多分类的类别概率使用独热(one-hot)编码表示,这也是我们预测的概率要逼近的真实概率。以三分类为例(如下表),类别标签中只有1个类别为1,其余为零,分别表示该类型的概率。而在预测的时候,则会有一个较大的类别趋近于1,其他的都是趋近于0的。真实值的类别为2。
参考博客:[1]2019斯坦福CS224n深度学习自然语言处理笔记(3)——分类模型与神经网络

类型名

类别1

类别2

类别3

真实值

0

1

0

预测值 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_27

0.05

0.9

0.05

也就是说,对于真实值 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_27 来说,只有“类别2”才起作用,因为其余均为0。因此,平均交叉加粗样式熵损失函数可以表示为:神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_29

二、Derivative of Matrix

符号约定:

  • 标量由小写字母表示,如 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_30
  • 向量由粗体小写字母表示,如 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_31
  • 矩阵由大写加粗字母表示,如 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_32
  • 如无特殊说明,向量均表示列向量(行向量通过列向量转置来表示,如 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_33
  • 如无特殊说明,向量的元素表示均为行向量表示,如神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_34表示多个标量按水平方向排列,即行向量,相应的神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_35则表示列向量

(一)矩阵的几种乘积

(1)点积(内积)

  • 向量点积,也称为内积:神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_36
  • 矩阵内积(两个矩阵对应元素乘积,并求和):神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_37

(2)点乘(hadamard product,哈达码积)

矩阵点乘,也称元素积(element-wise product, point-wise product),表示两个矩阵对应元素相乘,要求两个矩阵大小完全一致。若神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_38,则有:神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_39

(3)克罗内克积(kronecker product)

也称直积、张量积。若神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_40,则有:神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_人工智能_41

(二)矩阵的运算

来源博客:矩阵求导术矩阵微积分(一)

关于矩阵的函数:神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_42

(1)微分运算

  1. 加(减)法 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_43
  2. 乘法神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_人工智能_44
  3. 转置神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_45
  4. 迹(trace)神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_人工智能_46
  5. 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_47神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_32是常量矩阵, 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_49是零矩阵
  6. 推论: 若神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_50是常量矩阵,则:神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_51
  7. 行列式神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_52其中 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_53 表示 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_32 的伴随矩阵。如果 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_32 可逆,则又有:神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_56
  8. Hadamard 积:逐元素乘法
    定义矩阵神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_32神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_58的Hadamard积为神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_59,记作神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_60,有结论:神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_人工智能_61
  9. 逐元素标量函数神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_62其中,神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_63 为对矩阵 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_64
  10. 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_65

(2)点乘运算

注意:点乘是矩阵对应元素相乘,要求参加运算的两个矩阵形状相同

  1. 定义式神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_66对于向量来说,该式可以进一步简化:神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_人工智能_67
  2. 交换律神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_68
  3. 加法分配律神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_69
  4. 与逐元素乘法的结合律神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_70
  5. 转置的交换神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_71

(3)迹运算

注意:迹运算的对象必须为方阵

  1. 标量的迹等于其自身神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_72
  2. 线性神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_73
  3. 乘法可交换性神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_74要求 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_32神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_76 的形状相同,这样才能保证 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_77
  4. 转置迹不变神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_78
  5. 迹与点乘的转换神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_79

(4)其他运算

神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_80

(三)标量对矩阵求导

参考博客:矩阵求导术

原则:标量 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_81对矩阵 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_82 求导,遵循一个原则,即 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_81对矩阵 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_82 的导数 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_85形状与矩阵 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_82

:设 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_87,求 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_88。其中 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_89神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_人工智能_90 向量,神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_82神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_92 矩阵,神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_93神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_94 向量,神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_14



解:

神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_96根据公式

神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_97 得到:

神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_98与矩阵

神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_人工智能_99 的形状一致。

:线性回归的损失函数定义为 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_100,求 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_101 的最小二乘估计,即 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_101 为何值时 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_103 可取得最小值。其中 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_104神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_人工智能_90 列向量,神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_82神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_92 矩阵,神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_101神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_94 向量,神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_103 为标量
解:要求极小值,只需找到 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_111 的零点。
我们的运算规则中并未定义二阶范数的微分,但根据向量范数的定义,我们可以将它表示成内积的形式:神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_112
接下来,求 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_103神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_101 的微分:
神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_人工智能_115根据公式 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_116 可得:神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_117
神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_118 得(加粗的 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_119 代表零向量,其形状与 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_101 相同):
神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_121

(四)矩阵对矩阵求导

这部分内容主要以cs224n官方给的矩阵求导的pdf为主,下载请戳这里

(1)Jacobian Matrix

假设函数 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_122 能将 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_123 维向量映射为 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_124 维:神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_125则对应的Jacobian Matrix为:神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_126

利用Jacobian 矩阵和链式法则,即可计算矩阵的导数,下面列举一些结论,方便以后手动计算。

(2)结论

1.矩阵乘以列向量,对列向量求导

神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_127神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_128,则神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_129

证明:将神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_130看作一个映射函数:神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_人工智能_131 (因为神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_132神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_124维变为神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_123维),其中神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_135,则对应的Jacobian矩阵是 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_136 维的:
神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_137

2.行向量乘以矩阵,对行向量求导

神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_138神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_人工智能_139,则神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_140(证明同上,略)

3.向量对自身求导

若列向量神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_人工智能_141,则神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_人工智能_142

4.向量的逐元素函数求导

神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_143神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_人工智能_144,其中 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_145 是对向量进行逐元素操作的函数,即 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_146,则神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_147
证明:将神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_148看作一个映射函数:神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_149 ,则对应的Jacobian矩阵是 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_150 维的:
神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_151
也可写成神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_152

Since multiplication by a diagonal matrix is the same as doing elementwise multiplication by the diagonal, we could also write 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_153 when applying the chain rule
由于乘以一个对角阵,等同于按element-wise乘以一个对角阵,所以当应用链式法则时也写作神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_153

三、人工神经元(Artificial Neurals)

神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_155


神经元是一个通用的计算单元,具有 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_123 个输入和 1 个输出,如图所示。神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_81 是非线性激活函数,神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_158是输入和权重,神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_159 是偏置。输入经加权求和偏置后,通过激活函数 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_81 的作用输出,即为神经元的输出。公式如下:神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_161也可以表示向量形式:神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_162

单层的神经网络

参考博客:神经网络浅讲:从神经元到深度学习

一个神经元就可以看成是一个单层的神经网络。从形式上来看,它与感知机(感知机是基础的线性二分类模型)非常像。但由于感知机通常采用阶跃激活函数,即神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_163缺乏非线性的激活函数,故只能做线性决策,下图(左)。相对于感知机,神经元采用非线性激活函数的神经元可以拟合曲线函数,下图(右)。

神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_164

多层的神经网络

Without non-linearities, deep neural networks can’t do anything more than a linear transform
译:没有非线性,深度神经网络不能比线性变换做的更多

神经网络之所以能够拟合各种非线性函数,主要的功劳都归于非线性函数神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_81。神经网络每深一层都可以看作是一次线性变换,layer越多就拟合更复杂的非线性函数(如下图)。

神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_166

四、神经网络(Neural Networks)

We established in our previous discussions the need for non-linear classifiers since most data are not linearly separable and thus, our classification performance on them is limited. Neural networks are
a family of classifiers with non-linear decision boundary as seen in Figure 1.
译:我们在之前的讨论中确定了非线性分类器的必要性,因为大多数数据不是线性可分的,它们的分类性能是有限的。神经网络是一类具有非线性决策边界的分类器,如图1所示。

神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_167

一般来说,人们较喜欢选择“sigmoid”(也称为“二元逻辑函数”)作为神经元的激活函数。神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_168函数图像如下:

神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_169


可以看出,sigmoid函数连续光滑且严格单调,以(0,0.5)中心对称,是一个非常良好的阈值函数。此外,Sigmoid函数的导数是其本身的函数,即:神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_170,计算非常方便,也非常节省计算时间。

因此,即可得到上述所列的神经元公式。公式如下:神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_161即:神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_人工智能_172也可以表示向量形式:神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_162

将上述神经元的思想扩展到多个神经元,考虑多个神经元共享输入 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_132 的情况,如下图所示。

神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_175


为清晰描述,下面先统一数学表示:

  • 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_176为输入
  • 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_177 表示第神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_178个神经元的权重向量
  • 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_179表示整个网络的权重矩阵
  • 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_180
  • 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_181
  • 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_182表示激活函数
  • 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_人工智能_183为神经元输出

综上即有:神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_人工智能_184

(一)前馈计算

从上图可以发现,图片显示的是单层多神经元的网络,它有神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_123个输出。假设有这么一个命名实体识别(NER)的task,需要在下面句子中找出中心词“Pairs”是不是命名实体:

“Museums in Paris are amazing”

notes03中说到:

it is very likely that we would not just want to capture the presence of words in the window of word vectors
but some other interactions between the words in order to make the classification
译:我们很有可能不仅想要捕获单词向量窗口中的单词,还想要捕获单词之间的其他交互,以便进行分类

我们更希望捕获词之间的信息,因此以窗口内的几个词向量的combine作为输入。此外,我们不希望网络的输出有神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_123个,而是类似得分的一个输出,直接得出“Pairs”是不是命名实体的结果。这时就需对上图网络进行修改,如下图:

神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_人工智能_187

前馈传播示意图

Dimensions for a single hidden layer neural network: If we represent each word using a 4-dimensional word vector and we use a 5-word window as input, then the input 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_188. If we use 8 sigmoid units in the hidden layer and generate 1 score output from the activations, then 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_人工智能_189. The stage-wise feed-forward computation is then:神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_190
译:只有一个隐含层的神经网络的维度:如果我们使用4维的词向量表示word,且滑动窗口大小为5,那么输入向量为神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_188。如果在隐含层中使用8个sigmoid函数,并从激活中生成一个分数输出,那么神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_人工智能_189,前馈计算公式为:
神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_190

如上所述,修改就是多加一层神经元,新增的权重向量为神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_194

(二)最大间隔目标函数(Maximum margin objection function)

在上述NER任务中,我们目标是:

ensure that the score computed for “true” labeled data points is higher than the score computed for
“false” labeled data points.
确保正确标签数据点的分数要大于错误标签数据点的分数

换句话说,就是正样本的分数要高于负样本的分数。于是,假设有两个样本,一个是正样本,一个是负样本。

  • Museums in Paris (正样本)
  • Not all museums(负样本)

正样本的center word是 “Paris”,是命名实体;负样本的center word是 “museums”,不是命名实体。假设正样本和负样本的分数分别为 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_195,那么训练神经网络的目标就是(具体推导详见note03):神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_人工智能_196
其中,神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_197

(三)反向传播

训练过程就是最小化目标函数的过程,具体怎么最小化呢?用梯度下降法(或者梯度下降的变种算法)!

在神经网络的训练中,利用反向传播算法将目标函数的梯度在网络中反向传播,权重根据梯度调整值,并重复迭代。迭代的具体公式如下:神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_198

下面,举个例子说明反向传播的工作流程。下图显示的是一个“4-2-1”的神经网络。做以下表示说明:

  • 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_199为网络的输入
  • 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_200
  • 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_201 表示第神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_202层的第神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_203个神经元的输入(标量)
  • 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_人工智能_204 表示第神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_202层的输入
  • 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_206 表示第神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_202层的第神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_203个神经元的输出(标量)
  • 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_209 表示第神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_202层的输出
  • 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_211 表示来自神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_201的反向传播误差
  • 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_213表示第神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_202层到第神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_215层的权重矩阵
  • 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_216表示第 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_202 层的第 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_203 个神经元到第 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_215 层的第 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_178

于是,在这个“4-2-1”的神经网络中,有下列式子成立:
神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_221
各参数的维度为:
神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_222
注意一点,图中第神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_202层的权重 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_216 在第神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_215层中只对 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_226 有贡献,从而得到 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_227,这对接下来的推导很重要。

1、目标函数对权重的梯度计算

我们计算目标函数对权重 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_228 的梯度:
神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_229
最终发现,目标函数对权重 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_228 的梯度就是神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_231。而神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_232则是来自第 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_233 层第 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_234

代入具体数字看看,如果神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_235,则神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_236,目标函数对权重 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_237 的梯度是来自同层同神经元的输出神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_238与来自更深一层神经元(该神经元正是图中权重所指向的那个神经元)的反向传播误差神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_239的乘积。

神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_240

神经网络示意图


花了这么大的功夫来计算目标函数对权重的梯度,是有原因的。为了达到最大化间隔的目标,用的方法就是梯度下降,通过多次迭代找到间隔最大的那个函数的点。那么,为什么要计算梯度呢?因为目标函数的梯度所指的方向就是这个函数值下降最快的方向。所以我们让权重按这这个方向步进,迭代更新自己的值。

又有问题来了,问什么是对权重的梯度?而不是对输入神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_132的梯度呢?因为我们要训练的网络是根据输入得到一个输出,这个输出可以告诉我们哪个词是命名实体(是Pairs,还是museums)。训练网络的本质,就是训练网络中各层的权重,权重确定了,网络也就确定了。

2、神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_242

这里需要注意:官方note3文档中并没有解释什么是 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_242,连公式推导中都只是一带而过,没有很清晰的解释。当然,网上随处都是 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_242的解释,为了方便阅读,这里顺带提一下。首先计算目标函数对权重和偏置的梯度:
神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_245
由于神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_246 是两者都需要计算的相同部分,因此就把它叫做 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_247

再来看,上面推导的一长串公式对 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_247 的描述:神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_249,这两者一样吗?

当然一样,不信请看:神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_250
这就对上号了。

3、权重梯度的反向传播

刚刚解释的是目标函数对权重的梯度长什么样,由哪些部分组成。那么,知道其组成之后,权重的梯度又是如何反向传播的呢?

这里单单把第2层的第1个神经元(用 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_251

  1. 首先假设我们有个误差信号(error signal)从 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_252 处开始反向传播,这个误差信号值为神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_253
  2. 要穿过网络第3层神经元,需乘以该神经元的局部梯度(Local Gradient),即输出对输入的梯度:神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_人工智能_254所以来自第3层的误差信号值为 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_255
  3. 误差信号继续往回传播。此时有两个回去的方向,一是 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_256 ,二是 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_257,我们考虑 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_258,因此选择 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_256 方向的路线,误差信号传播到 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_252 处需乘以该路线上的权重 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_256 ,因此在 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_252 处的误差信号为 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_人工智能_263
  4. 与第2步相同,在误差信号穿过 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_258 时,需乘以该神经元的局部梯度神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_人工智能_265因此第二层的误差信号为 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_266
  5. 误差信号再往回传播,若选择 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_人工智能_267 方向,那么误差信号到达神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_人工智能_268时,其值为 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_269

综上,可归纳为:

神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_人工智能_270

神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_人工智能_271

权重梯度反向传播示意图

4、神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_人工智能_272神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_242的传播

网络中的参数除了权重之外,偏置也是极其重要的部分,偏置的反向传播与权重类似,如下图。

神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_人工智能_274

权重梯度反向传播示意图

  1. 误差信号 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_275神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_276 开始反向传播,到达 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_277 时,误差信号变为: 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_权重_278
  2. 此时,考虑 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_279 的输出流向多个下一层神经元,因此反向传播时就有多个误差信息同时流入该神经元,总的误差信号表示为 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络中为什么要进行矩阵相乘_280
  3. 在穿过 神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_神经网络_279 后,误差信号要乘以该神经元的局部梯度,即有:神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_人工智能_282

根据公式(1),可得到如下矩阵形式:
神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_人工智能_283

5、偏置梯度

对于某个神经元来说,其输出对偏置的导数均为1,则可快速得到:神经网络中为什么要进行矩阵相乘 神经网络矩阵求导_矩阵求导_284

五、Some Tips

详见官方note,这里不赘述。

Reference

1、2019斯坦福CS224n深度学习自然语言处理笔记(3)——分类模型与神经网络