《Neural Networks and Deep Learning》(2)

分类⼿写数字的⽹络 三层神经网络图 使⽤梯度下降算法进⾏学习 我们希望有⼀个算法,能让我们找到权重和偏置,以⾄于⽹络的输出 \(y(x)\) 能够拟合所有的训练输⼊ \(x\) 。 为了量化我们如何实现这个⽬标,我们定义⼀个代价函数: 就是为了求最优的 \(w, b\) 代价函数:有时被称为损失或⽬标函数。我们在这本书中使⽤了代价函数这个术语,但是你应该注意其他的术语,因为它经 常被⽤于研究论⽂和其他神经⽹络的讨论中。 训练神经⽹络的⽬的: 找到能最⼩化⼆次代价函数 \(C(w, b)\) 的权重和偏置 在真正的实现中,\(\eta\) 通常是变化的, 以⾄⽅程 (9) 能保持很好的近似度,但算法⼜不会太慢 ​ 你可以把这个更新规则看做 定义梯度下降算法 。这给我们提供了⼀种⽅式去通过重复改变 v 来找到函数C 的最⼩值。这个规则并不总是有效的——有⼏件事能导致错误,让我们⽆法从梯 度下降来求得函数C 的全局最⼩值,这个观点我们会在后⾯的章节中去探讨。但在实践中,梯 度下降算法通常⼯作地⾮常好,在神经⽹络中这是⼀种⾮常有效的⽅式去求代价函数的最⼩值,
进⽽促进⽹络⾃⾝的学习。 PS: 柯西-施⽡茨不等式: 两个向量的内积小于它们模的平方的和的开方 Q: 已经解释了当C 是⼆元及其多元函数的情况。那如果C 是⼀个⼀元函数呢?你能给出 梯度下降法在⼀元函数的⼏何解释么? A: 就是求导,求解最小值 Q: 我们怎么在神经⽹络中⽤梯度下降算法去学习呢? A: 其思想就是利⽤梯度下降算法去寻找能使 得⽅程 (6) 的代价取得最⼩值的权重wk 和偏置 bl。 梯度下降的更新规则: ​ 有种叫做 随机梯度下降 的算法能够加速学习。其思想就是通过 随机选取⼩量训练输⼊样本来 计算\(∇C_x\),进⽽估算梯度∇C 。通过计算少量样本的平均值我们可以快速得到⼀个对于实际梯度 ∇C 的很好的估算,这有助于加速梯度下降,进⽽加速学习过程。 为了将其明确地和神经⽹络的学习联系起来,假设 \(w_k\) 和 \(b_l\)表⽰我们神经⽹络中权重和偏置。 随即梯度下降通过随机地选取并训练输⼊的⼩批量数据来⼯作, 在线学习(online)概念 实现我们的⽹络来分类数字 Q: 验证集作用? A: 对于解决如何去设置某些神经网络中的 超参数 很有用,例如学习速率
1
2
3
4
5
6
class Network(object): 
def __init__(self, sizes):
self.num_layers = len(sizes)
self.sizes = sizes self.biases = [np.random.randn(y, 1) for y in sizes[1:]]
self.weights = [np.random.randn(y, x)
for x, y in zip(sizes[:-1], sizes[1:])]
TODO: 32 Q&A 补充 参考 感谢帮助! Another Chinese Translation of Neural Networks and Deep Learning