吴恩达Deep Learning 1-3周重点集锦

http://www.ai-start.com/dl2017/

第一门课 Neural Networks and Deep Learning神经网络和深度学习

第一周 Introduction to Deep Learning 深度学习引言

  • ReLU激活函数,全称Rectified Linear Unit修正线性单元 f ( x ) = m a x ( 0 , x ) f(x) = max(0,x) f(x)=max(0,x)
  • 为什么深度学习会兴起?有时间回看一遍
  • 传统的SVM等算法无法有效利用海量数据提升性能,而深度网络可以

第二周 Basics of Neural Network programming神经网络编程基础

  • sigmoid函数 f ( z ) = 1 1 + e − z f(z) = \frac{1}{1+e^{-z}} f(z)=1+ez1
  • 实现神经网络时,将权重 w w w和偏置 b b b分开比较好
  • 损失函数(loss function):衡量算法在单个样本的表现如何;代价函数(cost function):衡量算法在全部训练样本上的表现,损失函数求和取均值。
  • 计算图计算梯度核心:从右向左执行链式法则
  • 2.9-2.18 可以再看一遍视频,有时间的话

第三周 Shallow neural networks 浅层神经网络

  • [ m ] ^{[m]} [m] 表示第 m m m层网络中节点相关的数,这些节点的集合被称为第 m m m层网络
  • ( i ) ^{(i)} (i) 表示单个训练样本 i i i,第 i i i个训练样本
  • 传统惯例上输入层作为第0层,我们可将输入层的特征 x 1 , x 2 , x 3 x_1,x_2,x_3 x1,x2,x3等标记为 a [ 0 ] a^{[0]} a[0],即输入层的激活值
  • a k [ m ] a^{[m]}_{k} ak[m]表示第 m m m层的第 k k k个神经单元
  • 向量化 3.3-3.5
激活函数
  • tanh函数是zero-mean的,所以效果比sigmoid好
  • 二分类问题中,由于输出层y的值是0或1,希望预测是\hat{y}也介于0和1之间,所以使用sigmoid函数
  • sigmoid函数和tanh函数共同缺点,在z很大或很小时,导数梯度会变得很小,发生梯度弥散现象
  • 经验法则:如果是二分类输出0和1,输出层选择sigmoid函数,其它所有单元都选择ReLU函数
  • ReLU和leakly ReLU优点:计算速度快;不会产生梯度弥散
  • Leakly Relu不会产生所谓的稀疏性
  • 线性激活函数(恒等激励函数,把输入值输出), a = z a = z a=z,即 g ( z ) = z g(z) = z g(z)=z
反向传播

3.10 看视频

随机初始化
  • 如果将权重 W W W全都初始化为0,梯度下降将不起作用。因为初始化为0后,隐含单元所做的工作都是一样的,它们完全对称
  • 随机初始化 W W W,可以使用np.random.randn(2,2)生成高斯分布,再乘上一个很小的数,使得 W W W初始化为很小对的随机数。
  • b b b不存在对称问题(symmetry breaking problem),可以初始化为0
  • 为什么倾向于初始化很小的随机数呢?因为 W W W如果过大,计算激活值时, z = W x + b z=Wx+b z=Wx+b很容易过大或过小,梯度消失,学习很慢

第二门课 Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization 改善深层神经网络:超参数调试、正则化、及优化

第一周 Practical aspects of Deep Learning 深度学习的实践层面

  • 训练数据分为三部分,训练集+简单交叉验证集(dev set/val set)+测试集
  • 验证集目的在于验证不同的算法,检验哪种算法更有效
  • 测试集的目的在于正确评估分类器性能,对最终选定的神经网络系统做无偏估计
  • 小数据量时代(一般一万以下),常见做法是所有数据三七分,三分测试集,七分训练集;或者60%训练集,20%验证集,20%测试集
  • 大数据量时代(一百万以上),验证集和测试集各占1%;或者训练集可以占99.5%,验证和测试集各0.25%;或者验证集0.4%,测试集0.1%
  • 尽量确保验证集和测试集来自统一分布
  • 没有测试集也不要紧。只有验证集,通过验证集迭代选出适用的模型,不是无偏估计。这里验证集可以改称为“训练验证集”。
偏差 方差
  • 高偏差(high bias),欠拟合(underfitting)
  • 高方差(high variance),过拟合(overfitting)
  • 适度拟合(just right)
  • 可以通过几个指标研究bias和variance,训练集误差(train set error),测试集误差(dev set error)和最优误差(贝叶斯误差)。偏差和方差要基于最优误差来考虑
  • 偏差和方差都高的情况在高维数据比较常见,就是会过度拟合部分数据,而欠拟合另一部分数据。
  • 一般先分析偏差,再降方差。
  • 偏差高,需要评估训练集或训练数据的性能。尝试新的网络架构,选择新的优化算法等等;高偏差问题增加训练书句作用不大。
  • 方差高,正则化。
正则化
  • 逻辑回归。
    • L2正则。 w w w欧几里得范数的平方。欧几里得法线,向量参数 w w w的L2范数
    • 参数 w w w通常为一个高维参数矢量,已可表达高偏差问题; b b b可以不加
    • L1正则,使用的是 w w w的L1范数, w w w最终是稀疏的
    • 人们更多倾向于使用L2正则。
  • 神经网络
    • ∣ ∣ W [ l ] ∣ ∣ F 2 ||W^{[l]}||_F^2 W[l]F2 矩阵的 W W W的范数平方,被称为"弗罗贝尼乌斯范数",用下标F标注,表示矩阵中所有元素平方和
    • L2正则,权重衰减
  • 正则化预防过拟合原因:避免 W W W矩阵过大。如果 λ \lambda λ足够大, W W W中很多元素会接近0,很多隐藏单元的影响被消除,神经网络简化,网络会从过度拟合状态更接近高偏差状态。这个状态转化过程中中间有一个just right的状态,就是我们要的
  • 另一种想法,如果 z z z跟小,激活函数的那一段是线性状态,网络会十分简单
dropout正则化
  • dropout遍历网络的每一层,并设置消除神经网络中节点的概率
  • 设置完节点概率,我们会消除节点和节点相关的连线。最后得到一个节点更少,规模更小的网络,然后用backprop方法训练。
  • 常用的dropout方法为inverted dropout,反向随机失活
    • keep-prob参数,保留节点概率
    • 消除节点后,需要向外扩展,除以keep-prob参数 == 》为了不影响下一层的均值(期望),简化计算
    • 测试阶段不使用dropout函数
    • dropout使得神经元尽量不依赖与任一特征,更加平均地分布权重,因此权重的平方范数会被收缩。与L2正则类似
    • 每层的keep-prob可以不同。当某层过拟合现象严重时,可以降低keep-prob。或者可以某层使用dropout,某层不用,应用dropout层的keep-prob值相同。第一种方法缺点是超参数较多,第二种方法缺点是没有第一种灵活
    • dropout在视觉领域应用较多
    • 除非算法过拟合,一般不用dropout。
    • dropout的另一个缺点,代价函数 J J J不再明确定义,很难复查和调试。一般要先关闭dropout,保证 J J J单调递减;再打开dropout,调试。
其它正则化方法
  • 数据扩增:水平翻转、裁剪

  • 早停法(early stopping):

    • 绘制验证集误差,在验证集误差的最小值停止训练,得到中等 w w w大小的FANSHU1
    • 缺点是:同时处理了代价函数 J J J的优化问题和过拟合问题,没有“正交化”(一个时间做一个任务)。使得要处理的问题变复杂。
    • 优点:一次梯度下降即可找到 w w w的较小值,中间值和较大值。无需尝试L2正则化超参数KaTeX parse error: Undefined control sequence: \lamda at position 1: \̲l̲a̲m̲d̲a̲的很多值
    • 归一化输入:
      • 计算均值 μ \mu μ和方差 σ 2 \sigma^2 σ2,实现零均值和归一化方差。
      • 测试集使用训练集已经计算好的均值 μ \mu μ和方差 σ 2 \sigma^2 σ2
      • 使用原因是:在输入特征处于不同范围内时,归一化使得代价函数更容易优化;若处于相似范围内,则效果不大。
  • 在深度神经网络中,激活函数将以指数级递增或递减,引发梯度消失和梯度爆炸问题

1.11-1.14间看视频

神经网络的权重初始化
  • 如果神经网络中的神经元数量 n n n越大,希望 w i w_i wi越小。因为我们希望最终的 z z z
  • 减小 w i w_i wi的方法可以乘以 1 n l − 1 \sqrt {\frac{1}{n^{l-1}}} nl11
  • 如果用Relu,可以将方差设置为 2 n \frac{2}{n} n2
  • 如果用tanh,可以将方差设置为 1 n l − 1 \frac{1}{n^{l-1}} nl11

第二周 Optimization algorithms 优化算法

mini-batch梯度下降
  • batch设为训练集大小 m m m,就是批梯度下降算法(batch gradient descent)
  • batch设为1,就是随机梯度下降(stochastic gradient descent),不会收敛,会在最小值附近波动。
  • 实践中最好选择不大不小的mini-batch尺寸,一般为 2 n 2^n 2n,且要符合cpu/gpu内存,64-512,
  • 好处有二:
    • 大量向量化,提升速度。batch=1会失去向量化的优势,效率底下。
    • 无需等待整个训练集被处理完。
指数加权平均 Exponentially weighted averages

v t = β v t − 1 + ( 1 − β ) θ t v_t = \beta v_{t-1} + (1-\beta) \theta_t vt=βvt1+(1β)θt

  • 计算时可将 v t − 1 v_{t-1} vt1视为 1 1 − β \frac{1}{1-\beta} 1β1天的平均温度
  • β \beta β值较高时,曲线较平坦,波动更小;缺点是曲线适应缓慢,会延迟,在图像上表现是曲线右移
  • β \beta β值较低时,曲线有更多噪声,但能更快适应温度变化

假设 β = 0.9 \beta=0.9 β=0.9,将 v 100 v_{100} v100展开
v 1 00 = 0.1 θ 100 + 0.1 × ( 0.9 ) × θ 99 + 0.1 × ( 0.9 ) 2 × θ 98 + 0.1 × ( 0.9 ) 3 × θ 97 v_100 = 0.1\theta_{100} +0.1 \times (0.9) \times \theta_{99} + 0.1 \times (0.9)^2 \times \theta_{98} + 0.1 \times (0.9)^3 \times \theta_{97} v100=0.1θ100+0.1×(0.9)×θ99+0.1×(0.9)2×θ98+0.1×(0.9)3×θ97

  • 这些系数想加起来逼近1,称之为偏差修正

  • 计算平均多少天的温度,可以通过计算 ( 1 − ϵ ) 1 ϵ (1-\epsilon)^{\frac{1}{\epsilon}} (1ϵ)ϵ1是否等于 1 e \frac{1}{e} e1得到

  • 指数加权平均的优势在于占用极少内存

  • 如果初始化 v 0 = 0 v_0=0 v0=0,加权平均地前几天的估测都会较低。可以使用 v t 1 − β t \frac{v_t}{1-\beta^t} 1βtvt进行偏差修正。随着t的增加, β t \beta^t βt接近0,所以在初期偏差修正才起作用。

Momentum 动量梯度下降法
  • 计算梯度的指数加权平均,并利用该梯度更新你的权重
  • 在每次迭代 t t t
    • 正常计算 d W dW dW d b db db
    • v d W = β v d W + ( 1 − β ) d W v_{dW} = \beta v_{dW} + (1-\beta) dW vdW=βvdW+(1β)dW
    • v d b = β v d b + ( 1 − β ) d b v_{db} = \beta v_{db} + (1-\beta) db vdb=βvdb+(1β)db
    • W = W − α v d W W = W- \alpha v_{dW} W=WαvdW
    • b = b − α v d b b = b- \alpha v_{db} b=bαvdb

β \beta β常用0.9

RMSprop 均方根prop算法
  • root mean square prop算法

  • 在每次迭代 t t t

    • 正常计算 d W dW dW d b db db
    • S d W = β S d W + ( 1 − β ) ( d W ) 2 S_{dW} = \beta S_{dW} + (1-\beta) (dW)^2 SdW=βSdW+(1β)(dW)2
    • S d b = β S d b + ( 1 − β ) ( d b ) 2 S_{db} = \beta S_{db} + (1-\beta) (db)^2 Sdb=βSdb+(1β)(db)2
    • W = W − α d W S d W W = W- \alpha \frac{dW}{\sqrt{S_{dW}}} W=WαSdW dW
    • b = b − α d b S d b b = b- \alpha \frac{db}{\sqrt{S_{db}}} b=bαSdb db
  • 它可以帮助我们消除不同方向的摆动,可以使用更大的学习率,而无需担心在维度方向上的偏离

  • 实际操作中,为了避免除以0,会在分母上加一个很小的 ϵ = 1 0 − 8 \epsilon = 10^{-8} ϵ=108,保证数值稳定

Adam
  • Adaptive Moment Estimation 适应性动量估计法,基本上是结合了Momentum和RMSprop算法

  • 初始化 v d W = 0 , S d W = 0 v_{dW}=0,S_{dW}=0 vdW=0,SdW=0,b同理

  • 在每次迭代 t t t
    正常计算 d W dW dW

  • v d W = β 1 v d W + ( 1 − β 1 ) d W v_{dW} = \beta_1 v_{dW} + (1-\beta_1) dW vdW=β1vdW+(1β1)dW

  • S d W = β 2 S d W + ( 1 − β 2 ) ( d W ) 2 S_{dW} = \beta_2 S_{dW} + (1-\beta_2)(dW)^2 SdW=β2SdW+(1β2)(dW)2

  • v d W c o r = v d W 1 − β 1 t v_{dW}^{cor} = \frac{v_{dW}}{1-\beta_1^{t}} vdWcor=1β1tvdW

  • S d W c o r = S d W 1 − β 2 t S_{dW}^{cor} = \frac{S_{dW}}{1-\beta_2^{t}} SdWcor=1β2tSdW

  • W = W − α v d W c o r S d W c o r + ϵ W = W - \alpha \frac{v_{dW}^{cor}}{\sqrt{S_{dW}^{cor}} + \epsilon} W=WαSdWcor +ϵvdWcor

β 1 = 0.9 , β 2 = 0.999 , ϵ = 1 0 − 8 \beta_1 = 0.9, \beta_2 = 0.999, \epsilon = 10^{-8} β1=0.9,β2=0.999,ϵ=108

学习率衰减
  • 随时间减少学习率,加快学习算法收敛

  • 衰减方法

    • α = 1 1 + 衰 减 率 ∗ e p o c h α 0 \alpha = \frac{1}{1+衰减率*epoch}\alpha_0 α=1+epoch1α0
    • 指数衰减 α = 0.9 5 e p o c h α 0 \alpha = 0.95^{epoch} \alpha_0 α=0.95epochα0
    • 离散下降(discrete stair cease),一段时间学习率降一半
    • α = k e p o c h α 0 \alpha = \frac{k}{\sqrt{epoch}} \alpha_0 α=epoch kα0
  • 鞍点,梯度为0的点。高维学习常常碰到鞍点,而非局部最优点。

第三周 Hyperparameter tuning

  • 超参数取值两个策略:

    • 随机取点
    • 粗糙到精细
  • 随机取值并非在有效范围内随机均匀取值,而是选择合适的标尺来探究这些超参数

  • 使用对数标尺搜索超参数

  • 指数加权平均值 β \beta β可通过给 1 − β 1-\beta 1β取值得到

两种超参数调试方法:

  • Babysitting one model,照看一个模型,观察表现,并耐心调试学习率。适用于:有庞大数据,但是计算资源不足 (pandas 熊猫方式)
  • Training many models in parallel:同时实验多种模型,设置超参数让它自己运行。适用于:计算资源足够(鱼子酱方式 caviar)

Batch Normalization

对每个隐藏层,真正归一化的是 z z z而非激活 a a a

μ = 1 m ∑ i z ( i ) \mu = \frac{1}{m} \sum_i z^{(i)} μ=m1iz(i)
σ 2 = 1 m ∑ i ( z ( i ) − μ ) 2 \sigma^2 = \frac{1}{m} \sum_i (z^{(i)-\mu)^2} σ2=m1i(z(i)μ)2
z n o r m ( i ) = z ( i ) − μ σ 2 + ϵ z_{norm}^{(i)} = \frac{z_{(i)-\mu}}{\sqrt{\sigma}^2+\epsilon} znorm(i)=σ 2+ϵz(i)μ
z ^ n o r m ( i ) = γ z n o r m ( i ) + β \hat{z}_{norm}^{(i)} = \gamma z_{norm}^{(i)} + \beta z^norm(i)=γznorm(i)+β

γ = σ 2 + ϵ , β = μ \gamma = \sqrt{\sigma}^2+\epsilon, \beta=\mu γ=σ 2+ϵ,β=μ,相当于最后归一化得到的 z z z与原 z z z恒等。通过调节 γ \gamma γ β \beta β,可以调节隐藏单元值得分布。

将BN拟合进神经网络,神经网络反向更新参数时会更新每层的 γ \gamma γ β \beta β
由于要进算均值,所以 b b b没有用了,必须去掉它,由 β [ l ] \beta^{[l]} β[l]代替

BN有用的原因

  • 和先前归一化一样,可以使不同维度的特征有类似的范围
  • 使深层的权重更能经受住变化。如果前层数据的分布改变(covariate shift,协变量转移),后层的数据也要改变以适应变化的分布。由于BN限制了前层分布的均值和方差,使得后层更容易适应前层的变化。
    • 它减弱了前层参数的作用与后层参数作用之间的联系,使得每层网络都可以自己学习,稍稍独立与其它层,加速整个网络的学习
    • 增加噪声,轻微正则化。
      【较大的mini-batch,会减小正则化效果】

测试时的BN得到 μ \mu μ σ 2 \sigma^2 σ2的方法是指数加权平均。利用每次mini-batch得到的 μ \mu μ σ 2 \sigma^2 σ2来做加权平均。

softmax,线性决策边界???

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值