1 代价函数
符号表示 | 具体含义 |
---|---|
( x ( i ) , y ( i ) ) (x^{(i)},y^{(i)}) (x(i),y(i)) | 第 i i i个训练实例 |
m m m | 训练实例的个数 |
L L L | 神经网络结构的层数 |
s l s_l sl | 第 l l l层的单元数量(不包含偏置单元) |
J
(
Θ
)
=
−
1
m
∑
i
=
1
m
∑
k
=
1
K
[
y
k
(
i
)
log
(
(
h
Θ
(
x
(
i
)
)
)
k
)
+
(
1
−
y
k
(
i
)
)
log
(
1
−
(
h
Θ
(
x
(
i
)
)
)
k
)
]
+
λ
2
m
∑
l
=
1
L
−
1
∑
i
=
1
s
l
∑
j
=
1
s
l
+
1
(
Θ
j
,
i
(
l
)
)
2
J(\Theta) = - \frac{1}{m} \sum_{i=1}^m \sum_{k=1}^K \left[y^{(i)}_k \log ((h_\Theta (x^{(i)}))_k) + (1 - y^{(i)}_k)\log (1 - (h_\Theta(x^{(i)}))_k)\right] + \frac{\lambda}{2m}\sum_{l=1}^{L-1} \sum_{i=1}^{s_l} \sum_{j=1}^{s_{l+1}} ( \Theta_{j,i}^{(l)})^2
J(Θ)=−m1∑i=1m∑k=1K[yk(i)log((hΘ(x(i)))k)+(1−yk(i))log(1−(hΘ(x(i)))k)]+2mλ∑l=1L−1∑i=1sl∑j=1sl+1(Θj,i(l))2
在神经网络中,我们可能有许多输出节点。我们表示 h Θ ( x ) k h_\Theta(x)_k hΘ(x)k作为一个假设,作为假设函数的第 k k k个输出。
我们添加了一些嵌套的求和来计算我们的多个输出节点。在等式的第一部分中,在方括号之前,我们有一个额外的嵌套求和,它循环输出节点的数量。
在正则化部分中,在方括号之后,我们必须考虑多个 Θ \Theta Θ矩阵。当前theta矩阵中的列数等于当前层中的节点数(包括偏置单元)(即 s j + 1 s_j+1 sj+1)。当前 Θ \Theta Θ矩阵中的行数等于下一层中的节点数(不包括偏置单元)(即 s j + 1 s_{j+1} sj+1)。与逻辑回归一样,我们对每个项都进行平方,以使最终的模型尽可能简洁。
2 反向传播算法
假设只有一个样本,把前向传播向量化,这使得我们可以计算神经网络结构里的每一个神经元的激励值。
反向传播(Back propagation):
δ
j
(
l
)
\delta ^{(l)}_{j}
δj(l)就是第
l
l
l层节点
j
j
j的误差。
注意:没有
δ
(
1
)
\delta ^{(1)}
δ(1)项,因为第1层为输入层,没有误差。
反向传播法这个名字,源于我们从输出层开始计算
δ
(
4
)
\delta^{(4)}
δ(4),然后我们返回到上一层计算第三隐藏层的
δ
(
3
)
\delta^{(3)}
δ(3),接着我们再往前一步来计算
δ
(
2
)
\delta^{(2)}
δ(2) ,所以说,我们是类似于把输出层的误差反向传播给了第3层,然后是再传到第2层,这就是反向传播的意思。
(右侧蓝色笔记为向量化之后的形式)
反向传播算法具体实现流程:(红色笔记为向量化后的操作)
3 反向传播直观理解