0.python基础
https://www.codecademy.com/catalog
1.github
https://github.com/iamtrask/Grokking-Deep-Learning
2.AI
https://www.codecademy.com/catalog/subject/artificial-intelligence
---------------------------------------------------------------------------------------------------------------------------------
8.正则化和批量处理
神经网络的宿敌是过拟合。
神经网络的表达能力越强大(层数和权重数量越多),网络就越容易过拟合。
8.1 记忆与泛化
8.2神经网络中的过拟合
如果你过度训练神经网络,它会变得更糟!
神经网络过拟合现象的一个更正式定义是,这个神经网络学习到了数据集中的噪声,而不是仅仅基于真实信号做出决策。
8.3 过拟合从何而来?
过拟合来自于细节信息。
如何让神经网络只在信号上进行训练,而忽略噪声?一种方法是提前停止。
事实证明,大量噪声来自于图像在细粒度上的各种细节。
8.4 最简单的正则化:提前停止。
当网络的表现开始变差时,停止训练。
正则化——用于在机器学习模型中鼓励泛化的方法的一个子集,通常通过提高模型学习训练数据的细粒度细节的难度来实现。
8.5 行业标准正则化:dropout
方法:在训练过程中随机关闭神经元(设置为0)
通过每次随机训练网络中额一部分,dropout能够让一张大网络像小网络一样进行学习——较小的神经网络不会发生过拟合。
小的神经网络没有太多的表达能力。它们无法抓住那些可能导致过拟合的更细粒度的细节。它们只留下了捕捉那些更大、更明显、更高级特性的空间。
8.6 为什么dropout有效:整合是有效的
dropout是一种训练一系列网络并对其进行平均的形式。
当过拟合发生时,没有任何两个神经网络会以完全相同的方式过拟合。只有在每张训练图像都会被完美地预测后,过拟合现象才会发生,此时误差为0,神经网络停止学习。
虽然大型非正则化神经网络更可能对噪声过度拟合,但它们不太可能对相同的噪声过拟合。
尽管神经网络是随机生成的,但它们仍然是从学习最大的、最广泛的特征开始的,之后才会捕捉更多关于噪声的信息。
i = 0
layer_0 = images[i:i+1]
dropout_mask = np.random.randint(2,size=layer_1.shape) #在Layer_1上实现dropout,将layer_1
的值乘以由1和0组成的随机矩阵。
dropout_mask使用的是50%Bernoulli分
布。dropout_mask的值有50%是0,50%
是1.
layer_1 *= dropout_mask * 2 # layer_2会计算layer_1的加权和。如果关闭layer_1中一半的
节点,那么这个和将减半。因此layer_2需要增加对layer_1
的敏感度。所以将layer_1乘以2.
layer_2 = np.dot(layer_1, weights_1_2)
error += np.sum((labels[i:i+1] - layer_2) ** 2)
correct_cnt += int(np.argmax(layer_2) == np.argmax(labels[i+i+1]))
layer_2_delta = (labels[i:i+1] - layer_2)
layer_1_delta = layer_2_delta.dot(weights_1_2.T) * relu2deriv(layer_1)
layer_1_delta *= dropout_mask #
weights_1_2 += alpha * layer_1.T.dot(layer_2_delta)
weights_0_1 += alpha * layer_0.T.dot(layer_1_delta)
dropout还会减慢训练准确率上升的速度。
dropout是一种噪声。它使得神经网络在训练数据上的训练过程更加复杂,就像腿上负重跑马拉松一样。训练确实更困难了,但当你在大型比赛中将腿上的负重解开时,你会感觉身轻如燕,跑得更快。
8.7 批量梯度下降
小批量随机梯度下降。一次用100个训练样例进行训练,在更新权重时,使用所有100个样例的权重增量的平均值。
在训练中不断地进行平均权重更新。事实证明,对单个样例进行训练,在生成权重更新增量时,会有非常大的噪声。因此,对这些权重增量更新进行平均可使学习过程更平滑。