三层神经网络图
我们希望有⼀个算法,能让我们找到权重和偏置,以⾄于⽹络的输出 y(x) 能够拟合所有的训练输⼊ x 。为了量化我们如何实现这个⽬标,我们定义⼀个代价函数:
就是为了求最优的 w,b
代价函数:有时被称为损失或⽬标函数。我们在这本书中使⽤了代价函数这个术语,但是你应该注意其他的术语,因为它经 常被⽤于研究论⽂和其他神经⽹络的讨论中。
训练神经⽹络的⽬的: 找到能最⼩化⼆次代价函数 C(w,b) 的权重和偏置
在真正的实现中,η 通常是变化的, 以⾄⽅程 (9) 能保持很好的近似度,但算法⼜不会太慢
你可以把这个更新规则看做 定义梯度下降算法 。这给我们提供了⼀种⽅式去通过重复改变 v 来找到函数C 的最⼩值。这个规则并不总是有效的——有⼏件事能导致错误,让我们⽆法从梯 度下降来求得函数C 的全局最⼩值,这个观点我们会在后⾯的章节中去探讨。但在实践中,梯 度下降算法通常⼯作地⾮常好,在神经⽹络中这是⼀种⾮常有效的⽅式去求代价函数的最⼩值, 进⽽促进⽹络⾃⾝的学习。
PS: 柯西-施⽡茨不等式: 两个向量的内积小于它们模的平方的和的开方
Q: 已经解释了当C 是⼆元及其多元函数的情况。那如果C 是⼀个⼀元函数呢?你能给出 梯度下降法在⼀元函数的⼏何解释么? A: 就是求导,求解最小值
Q: 我们怎么在神经⽹络中⽤梯度下降算法去学习呢? A: 其思想就是利⽤梯度下降算法去寻找能使 得⽅程 (6) 的代价取得最⼩值的权重wk 和偏置 bl。
梯度下降的更新规则:
有种叫做 随机梯度下降 的算法能够加速学习。其思想就是通过 随机选取⼩量训练输⼊样本来 计算∇Cx ,进⽽估算梯度∇C 。通过计算少量样本的平均值我们可以快速得到⼀个对于实际梯度 ∇C 的很好的估算,这有助于加速梯度下降,进⽽加速学习过程。
为了将其明确地和神经⽹络的学习联系起来,假设 wk 和 bl 表⽰我们神经⽹络中权重和偏置。 随即梯度下降通过随机地选取并训练输⼊的⼩批量数据来⼯作,
在线学习(online)概念
Q: 验证集作用? A: 对于解决如何去设置某些神经网络中的 超参数 很有用,例如学习速率
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
感谢帮助!
本文作者: yiyun
本文链接: https://moeci.com/posts/分类-读书笔记/NN-DL-notebook-2/
版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!