吴恩达深度学习工程师
##########神经网络和深度学习#################
第一周:深度学习概论
1.3用神经网络进行监督学习
监督学习用于结构化数据(每个特征都有清晰的定义)和非结构化数据(音视频,文本等等)
神经网络能够更好的理解非结构化数据。神经网络改变了监督学习。
1.4为什么深度学习会兴起?
第二周:神经网络基础
2.1二分分类
神经网络中m个样本按列组成X输入
2.2逻辑回归
希望y是一个0-1的概率值,所以要用sigmoid函数
2.3 logistic回归损失函数
loss function单个样本:
cost function: m个样本
2.4 梯度下降法:
对于logistic回归,参数所有的初始化方法都可以,通常初始化为0。
2.5——2.6导数
2.7计算图
2.8计算图的导数计算
2.9 逻辑回归中的梯度下降法
2.10 m个样本的梯度下降法
2.11——2.12 向量化
2.13 向量化逻辑回归
2.14 向量化的逻辑回归的梯度输出
2.15 python中的广播:
对矩阵A的列求和
2.16 关于numpy向量的说明
assert(判断条件)
2.17 jupyter和python笔记本的说明
未看
2.18 logistic损失函数解释:
第三周:浅层神经网络
1,神经网络概览
2. 神经网络表示:
从第n层到n-1层的第n层的W表示是:W(n层节点数,n-1层节点数)
3. 计算神经网络的输出:
4:多个例子中的向量化:
5:向量化的解释:
6:**函数
tanh的效果基本总比sigmoid好,只有在输出层,为了使y介于(0,1),使用sigmoid,但他们都有一个缺点:当x很大时,梯度几乎为0,使用relu函数时,梯度下降较快;
7:为什么要用**函数:
只有在输出层可能用到线性函数
8:**函数的导数
9——10神经网络的梯度下降
11.随机初始化:
当参数W初始化为0时,无论输入样本是什么,在隐藏层中的结果是一样的,会出现对称性,隐层单元在计算相同的方程
把W初始化为较小的值的原因:因为**函数sigmoid,tanh,relu等,在数大的时候,梯度不明显,降低学习速率
第四周:深层神经网络
4.1深层神经网络
4.2前向传播
4.3核对矩阵维数
dw和w维度是一样的,db和b的维度是一样的
4.4为什么用深层表示
浅层网络要想和深层网络达到同样的效果,节点数要成指数倍增长
4.5搭建深层神经网络快:
4.6前向传播和反向传播
第二部分:改善深度神经网络:超参数调试、正则化及优化
第一周:深度学习的实用层面
1.1训练测试开发
样本不均衡的情况下,也即训练所使用的样本质量好,测试的时候的样本质量不好,要:测试机和验证集的分布相同会比较好
1.2偏差和方差
欠拟合:高偏差
过拟合:高方差
关键指标:训练集误差和验证集误差
高偏差并且高方差的情况是模型拟合了个别特殊数据,
1.3机器学习基础
1.4正则化
解决高方差:增加数据是好的方式,也可以正则化
L1正则化,W最终是稀疏的,理论上可以压缩模型,但是效果并不明显
1.5为什么正则化可以减少过拟合?
正则化是W减小,减小权重,相当于简化网络
1.6 Dropout正则化
dropout中的方法一:反向随机失活
测试阶段不能用dropout,不然结果是随机的
1.7 Dropout的理解
对于一个神经元来说,引入dropout后,神经元的所有输入都将变成是一个随机存在的输入,也即每个输入都不变的不可靠,随机消失,这时权重W为了消除这个影响,会减小,也就起到了正则化的效果
该层的神经元数目越多,可能keep-prob设置的越低。使用dropout的缺点是在交叉验证时,要搜索更多的参数
‘计算机领域中需要大量的数据,但是数据比较少,总是容易过拟合
损失函数没有了明确的定义,不容易训练
1.8 其他正则化方法
数据增强————当数据不够时,水平翻转等等增加训练集,裁剪,竖直反转不推荐
early stop————提早停止梯度下降,但也意味着不再优化代价函数J
1.9 正则化输入
归一化可以提高训练速度
在归一化过程中,测试集用到的平均值和方差应该是由训练集产生的,而不能是测试集产生的
1.10 梯度消失和梯度爆炸
1.11 神经网络权重初始化——应对梯度消失和梯度爆炸
relu函数时,权重初始化2/n开方,tanh时初始化为(1/nl-1)开平方称为Xavier初始化
1.12 梯度的数值逼近
双边误差小于单边误差,选用双边误差
1.13 梯度检验
检验反向传播是否正常运行
1.14 梯度检验实际中的情况
第二周:优化算法
2.1 Mini-batch梯度下降法
把训练集分成多个子集
2.2 理解Mini-batch梯度下降法
随机梯度下降噪声很大,消除了向量化带来的加速的效果,因为一次只是处理一个样本
mini-batch在最后不收敛的时候,可以尝试减小学习率
2.3 指数加权平均
可以将Vt看作是1/(1-β)天数的平均,例如:如果β=0.9,那么1/(1-0.9)=10,可以说是当前数值和前面10个的平均值
2.4 理解指数加权平均
2.5 指数加权平均的偏差修正
让加权平均运算更加正确
在实际使用中,不会受到偏差的影响,因为10轮迭代后,数据就接近正常预测了
2.6 动量梯度下降法
计算梯度的指数加权平均数,一般的梯度下降在整个过程中是震荡的,所以下降的速度会比较慢,不能用比较大的学习率,不然的话会像紫色线那样,结果偏离函数的范围
2.7 RMSprop
也可以加速梯度下降,
2.8 Adam优化算法
在此算法中,学习率α很重要 β1是动量梯度下降用0.9比较好 β2作者用0.999 二恩用10(-8)次方,一般不需要设置
2.9 学习率衰减
如果学习率不变的话,从一开始如果学习率设置的大,最后的结果会在最右值附近以之前学习率为根据变化,波动会比较大,用了学习率衰减后,随着训练轮数的增加,最后学习率降下来,最后的结果会在最优值附近较小的范围内波动2.10 局部最优的问题
事实上,之前说的局部最优点,并不正确,因为梯度为0的点并不是局部最优点,而是通常是鞍点,所以在深度神经网络中,陷在局部最优点不太可能,还有一个问题是,在往鞍点下降的过程中,会较慢,因为鞍点附近的梯度基本为0
第三周:超参数调试
3.1 调试
可以用网格搜索法
3.2 为超参数选择合适的范围
以学习率α为例,当在0.0001——1随机取值时,0.1-1有90%的概率,0.001——0.1之间太少.
3.3 两种训练方式
一中是熊猫方式,一种是鱼子方式
3.4 正则化网络的**函数
batch归一化,对输入特征归一化,于是也可以对隐层进行归一化,但是我们不希望隐层归一化后的分布为均值0,方差为1的分布,于是对归一化后的隐层加上γ和β,这两个也是训练的参数,作用是可以随意设置Z=γz+β的均值,归一化通常是对z进行的,不是对a进行的
3.5 将normbatch拟合进神经网络
对每一层进行Batch归一化,因为z要进行归一化,所以每一层的b参数就没有意义,就算是加上,归一化后又减去,所以没用,就用归一化后β代替
3.6 norm为什么会奏效
对于每一层运用norm归一化后,把每一层用归一化和γ、β限制起来,方差为1,减小每一层值的变化的范围,同时也能减小来自于别的层的影响,使网络即使是输入的分布变化很大,下一层的变化也只会在归一化后的方差内变化,增强了网络的稳定性。
3.7 测试阶段归一化
在训练的过程中,由指数加权平均算出u和σ,然后只用根据z,就能算出归一化