网络结构
a
n
(
l
)
×
1
(
l
)
=
(
W
n
(
l
−
1
)
×
n
(
l
)
(
l
)
)
T
z
n
(
l
−
1
)
×
1
(
l
−
1
)
z
n
(
l
)
×
1
(
l
)
=
g
l
(
a
n
(
l
)
×
1
(
l
)
)
其
中
,
W
包
含
了
权
重
和
偏
置
,
每
一
层
增
加
一
个
神
经
元
,
其
值
为
1
;
z
(
1
)
=
x
\mathbf{a}^{(l)}_{n^{(l)}\times 1}=(\mathbf{W}^{(l)}_{n^{(l-1)}\times n^{(l)}})^T\mathbf{z}^{(l-1)}_{n^{(l-1)}\times 1}\\ \mathbf{z}^{(l)}_{n^{(l)}\times 1}=g_l(\mathbf{a}^{(l)}_{n^{(l)}\times 1})\\ 其中,\mathbf{W}包含了权重和偏置,每一层增加一个神经元,其值为1;\mathbf{z}^{(1)}=\mathbf{x}
an(l)×1(l)=(Wn(l−1)×n(l)(l))Tzn(l−1)×1(l−1)zn(l)×1(l)=gl(an(l)×1(l))其中,W包含了权重和偏置,每一层增加一个神经元,其值为1;z(1)=x
目标函数
J ( W ) = 1 2 ∑ i = 1 N ( f ( x ( i ) ) , W − y ( i ) ) 2 min W J ( W ) 其 中 , W 表 示 所 有 权 重 , N 表 示 样 本 数 量 J(\mathbf{W})=\frac{1}{2}\sum_{i=1}^{N}(f(\mathbf{x}^{(i)}),\mathbf{W}-y^{(i)})^2\\ \min_\mathbf{W}J(\mathbf{W})\\ 其中,\mathbf{W}表示所有权重,N表示样本数量 J(W)=21i=1∑N(f(x(i)),W−y(i))2WminJ(W)其中,W表示所有权重,N表示样本数量
梯度-反向传播算法(Back propagation)
⋆ \star ⋆对于所有神经单元,运算只涉及到了加法(没有神经单元自身或之间的乘积)
- 输出层
对 于 输 出 层 l 中 的 某 个 单 元 j , 对 一 个 权 重 W i j ( l ) 求 偏 导 : ∂ J ∂ W i j ( l ) = ∂ J ∂ a j ( l ) ∂ a j ( l ) ∂ W i j ( l ) ∂ a j ( l ) ∂ W i j ( l ) = ∂ ∑ k = 0 H W i j ( l ) z k ( l − 1 ) ∂ W i j ( l ) = ∑ k = 0 H ∂ W i j ( l ) z k ( l − 1 ) ∂ W i j ( l ) = z i ( l − 1 ) ( H + 1 表 示 权 重 数 , 即 n ( l − 1 ) ) ∂ J ∂ W i j ( l ) = ∂ J ∂ a j ( l ) z i ( l − 1 ) d e f i n e δ j = − ∂ J ∂ a j ( l ) ∂ J ∂ W i j ( l ) = − δ j z i ( l − 1 ) 在 输 出 层 中 , 若 以 恒 等 函 数 作 为 激 活 函 数 , 则 J ( w ) = 1 2 ( a j ( l ) − y j ) 2 ∂ J ∂ a j ( l ) = a j ( l ) − y j ∂ J ∂ W i j ( l ) = ( y j − a j ( l ) ) z i ( l − 1 ) 对于输出层l中的某个单元j,对一个权重\mathbf{W}^{(l)}_{ij}求偏导:\\ \frac{\partial J}{\partial \mathbf{W}^{(l)}_{ij}}=\frac{\partial J}{\partial \mathbf{a}^{(l)}_j}\frac{\partial \mathbf{a}^{(l)}_j}{\partial \mathbf{W}^{(l)}_{ij}}\\ \frac{\partial \mathbf{a}^{(l)}_j}{\partial \mathbf{W}^{(l)}_{ij}}=\frac{\partial \sum_{k=0}^{H} \mathbf{W}^{(l)}_{ij} \mathbf{z}^{(l-1)}_k}{\partial \mathbf{W}^{(l)}_{ij}}=\frac{\sum_{k=0}^{H} \partial \mathbf{W}^{(l)}_{ij} \mathbf{z}^{(l-1)}_k}{\partial \mathbf{W}^{(l)}_{ij}}=\mathbf{z}^{(l-1)}_i(H+1表示权重数,即n^{(l-1)})\\ \frac{\partial J}{\partial \mathbf{W}^{(l)}_{ij}}=\frac{\partial J}{\partial \mathbf{a}^{(l)}_j}\mathbf{z}^{(l-1)}_i\\ define \delta_j=-\frac{\partial J}{\partial \mathbf{a}^{(l)}_j}\\ \frac{\partial J}{\partial \mathbf{W}^{(l)}_{ij}}=-\delta_j\mathbf{z}^{(l-1)}_i\\ 在输出层中,若以恒等函数作为激活函数,则\\ J(\mathbf{w})=\frac{1}{2}(\mathbf{a}^{(l)}_{j} -y_j)^2\\ \frac{\partial J}{\partial \mathbf{a}^{(l)}_{j}}=\mathbf{a}^{(l)}_{j}-y_j\\ \frac{\partial J}{\partial \mathbf{W}^{(l)}_{ij}}=(y_j-\mathbf{a}^{(l)}_{j})\mathbf{z}^{(l-1)}_i\\ 对于输出层l中的某个单元j,对一个权重Wij(l)求偏导:∂Wij(l)∂J=∂aj(l)∂J∂Wij(l)∂aj(l)∂Wij(l)∂aj(l)=∂Wij(l)∂∑k=0HWij(l)zk(l−1)=∂Wij(l)∑k=0H∂Wij(l)zk(l−1)=zi(l−1)(H+1表示权重数,即n(l−1))∂Wij(l)∂J=∂aj(l)∂Jzi(l−1)defineδj=−∂aj(l)∂J∂Wij(l)∂J=−δjzi(l−1)在输出层中,若以恒等函数作为激活函数,则J(w)=21(aj(l)−yj)2∂aj(l)∂J=aj(l)−yj∂Wij(l)∂J=(yj−aj(l))zi(l−1) - 隐藏层
对 于 隐 藏 层 l 中 的 单 元 j , 对 一 个 权 重 W i j ( l ) 求 偏 导 : ∂ J ∂ W i j ( l ) = ∂ J ∂ a j ( l ) z i ( l − 1 ) 对 于 一 个 样 本 的 某 个 输 出 单 元 : J = 1 2 ( f ( a ( l + 1 ) ) − y ) ( f 只 涉 及 a k ( l + 1 ) 之 间 的 加 法 ) ∂ J ∂ a j ( l ) = ∑ k = 0 n ( l + 1 ) ∂ J ∂ a k ( l + 1 ) ∂ a k ( l + 1 ) ∂ a j ( l ) = − ∑ k = 0 n ( l + 1 ) δ k ∂ a k ( l + 1 ) ∂ a j ( l ) = − ∑ k = 0 n ( l + 1 ) δ k ∂ a k ( l + 1 ) ∂ z j ( l ) ∂ z j ( l ) ∂ a j ( l ) = − ∂ z j ( l ) ∂ a j ( l ) ∑ k = 0 n ( l + 1 ) δ k ∂ a k ( l + 1 ) ∂ z j ( l ) = − g ′ ( a j ) ∑ k = 0 n ( l + 1 ) δ k W j k ( l + 1 ) 对于隐藏层l中的单元j,对一个权重\mathbf{W}^{(l)}_{ij}求偏导:\\ \frac{\partial J}{\partial \mathbf{W}^{(l)}_{ij}}=\frac{\partial J}{\partial \mathbf{a}^{(l)}_j}\mathbf{z}^{(l-1)}_i\\ 对于一个样本的某个输出单元:\\ J=\frac{1}{2}(f(\mathbf{a}^{(l+1)})-y)(f只涉及\mathbf{a}^{(l+1)}_k之间的加法) \\ \frac{\partial J}{\partial \mathbf{a}^{(l)}_j}=\sum_{k=0}^{n^{(l+1)}} \frac{\partial J}{\partial \mathbf{a}^{(l+1)}_k}\frac{\partial \mathbf{a}^{(l+1)}_k}{\partial \mathbf{a}^{(l)}_j}\\ =-\sum_{k=0}^{n^{(l+1)}} \delta_k\frac{\partial \mathbf{a}^{(l+1)}_k}{\partial \mathbf{a}^{(l)}_j}\\ =-\sum_{k=0}^{n^{(l+1)}} \delta_k\frac{\partial \mathbf{a}^{(l+1)}_k}{\partial \mathbf{z}^{(l)}_j}\frac{\partial \mathbf{z}^{(l)}_j}{\partial \mathbf{a}^{(l)}_j} \\ =-\frac{\partial \mathbf{z}^{(l)}_j}{\partial \mathbf{a}^{(l)}_j}\sum_{k=0}^{n^{(l+1)}} \delta_k\frac{\partial \mathbf{a}^{(l+1)}_k}{\partial \mathbf{z}^{(l)}_j} \\ =-g'(\mathbf{a}_j)\sum_{k=0}^{n^{(l+1)}} \delta_k\mathbf{W}^{(l+1)} _{jk}\\ 对于隐藏层l中的单元j,对一个权重Wij(l)求偏导:∂Wij(l)∂J=∂aj(l)∂Jzi(l−1)对于一个样本的某个输出单元:J=21(f(a(l+1))−y)(f只涉及ak(l+1)之间的加法)∂aj(l)∂J=k=0∑n(l+1)∂ak(l+1)∂J∂aj(l)∂ak(l+1)=−k=0∑n(l+1)δk∂aj(l)∂ak(l+1)=−k=0∑n(l+1)δk∂zj(l)∂ak(l+1)∂aj(l)∂zj(l)=−∂aj(l)∂zj(l)k=0∑n(l+1)δk∂zj(l)∂ak(l+1)=−g′(aj)k=0∑n(l+1)δkWjk(l+1)
自动微分和计算图
- 计算图
- 静态计算图:编译时构建,程序运行时不可改变–可优化,并行能力强,灵活性差–tensorflow,theano
- 动态计算图:运行时动态构建–不容易优化,不利于并行,灵活性强–pytorch
- 自动微分:函数与参数之间有多条路径,可将多条路径上的导数再进行相加,得到最终的梯度
- 前向模式
- 反向模式–反向传播
优化问题
- 参数过多
- 局部最优
- 梯度消失–下层参数难调
- 参数解释困难
- 计算资源要大
- 数据要多
- 算法效率要好–收敛快