前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CS231n 课后作业第二讲 : Assignment 2(含代码实现)| 分享总结

CS231n 课后作业第二讲 : Assignment 2(含代码实现)| 分享总结

作者头像
AI研习社
发布2018-03-16 11:28:44
1.7K0
发布2018-03-16 11:28:44
举报
文章被收录于专栏:AI研习社

CS231n 是斯坦福大学开设的计算机视觉与深度学习的入门课程,授课内容在国内外颇受好评。其配套的课后作业质量也颇高,因此雷锋网 AI 研习社在近期的线上公开课上请来了一位技术大牛为大家来讲解这门课的配套作业。

本文根据 AI 研习社公开课上的直播视频内容整理而成,主要介绍 CS231n 课后作业第二套 Assignment 2 的完成思路与重点部分代码实现。如果你还没开始听 CS231n,可直接点击课程链接观看回放视频。

王煦中,CS 硕士,主要研究方向为自然语言处理与深度学习。知乎专栏喵神大人的深度工坊(http://t.cn/RTc9wfy )作者,日语及 ACGN 爱好者。

分享主题

CS231n 课后作业第二讲 : Assignment 2(含代码实现)作业链接:https://github.com/Observerspy/CS231n

分享提纲

Part 1 Fully-connected Neural Network Part 2 Batch Normalization Part 3 Dropout Part 4 Convolutional Networks Part 5 Tensorflow on CIFAR-10

第一部分分享主要是全连接神经网络,这里主要是对代码进行模块化,把每一层都抽象出来,分别实现每一层的前向和反向部分,实现多层神经网络。第二和第三部分讲的是神经网络中两个的重要技巧,对网络训练有很大的提升。本次作业中比较难的部分是卷积神经网络的实现,包括正向和反向的推导过程。

第一个部分是对代码的模块化处理,实现从两层到多层神经网络。

关于 Update rules

第一个改变是加入了动量更新,也就是惯性。第二个是 RMSProp(自适应学习率),第三个是 Adam(两者结合),其实是上面两个方法的结合,如果拿不准使用哪个方法,就用 Adam。

为什么需要 BN(Batch Normalization )?

传统机器学习往往需要对输入数据做一个归一化,通常使用的是零均值和方差归一,这样会保证输入的数据特征会有比较好的分布,使得算法可以比好好的学习。对于深度学习神经网络,使用 BN 使得每一层分布都保持在良好范围内。

BN 的原理

在求均值,求方差,归一化这三步做完之后,每一层的数据分布都是标准正太分布,导致其完全学习不到输入数据的特征。BN 第四步中最关键的是两个参数,这两个参数对归一化后的分母进行缩放和平移,通过网络自己学习平移和缩放来保留一定的特征。

训练过程

前向就是计算 minibatch 的均值和方差,然后对 minibatch 做 normalize 和 scale、shift。测试的时候没有 minibatch,通过使用基于 momentum 的指数衰减,从而估计出均值和方差。

反向过程

BN 的作用

可以有效减缓过拟合,减小不好的初始化影响,可以用大一点的学习率。通常放在激励函数前效果好一点。

Dropout 原理

训练时以概率 P 保留神经元,测试时所有神经元都参与。通常在测试的时候使用 inverted dropout 多移除一个 p 保证训练预测分布的统一。

Dropout 的作用

可以有效缓解过拟合,通常 dropout 放在激励函数的后面或者全连接层后。

接下里来看怎么实现一个卷积神经网络

卷积神经网络通常有三个单元结构,分别是卷积核,激活函数,池化层。先看卷积核,首先明确输入 x 和卷积核的形状 (数量,通道,高,宽)。

卷积核

这里的卷积和通信原理里的卷积还是稍有区别的,在这里其实只是卷积核和相应的区域进行元素乘,然后求和,课程官网给的说明十分形象生动。

也就是每个卷积核分别在每个通道上和对应区域进行元素乘,然后求和,对应图中:(-3(通道 1 元素乘后求和) + -1(通道 2 元素乘后求和) + 0 (通道 3 元素乘后求和))(三个通道求和) + 1(bias_0) = -3(out 的第一个格子里的值)

所以,关键问题就是根据步长如何确定 x 对应区域,这里需要对 Hnew(下标 i)和 Wnew(下标 j)进行双循环。选好区域直接和每个卷积(下标 k)核作元素乘就行了,注意 sum 的时候我们其实是在(C, H, W)上作的,因此 axis=(1, 2, 3)。这时候一个输出 out[:, k , i, j] 就计算好了。

所以上述一共套了 i, j ,k 三层循环,循环完毕后 out 再加上 bias 就行了。注意 b 的形状 (F,),因此要先把 b 扩展成和 out 一样的形状:b[None, :, None, None](None 相当于 np.newaxis)

以上就是前向计算,接下来是反向计算。

反向计算首先明确我们要求什么。求 dx,dw 和 db。

卷积核的三个导数具体的求解过程,请关注 AI 慕课学院视频回放(http://www.mooc.ai/open/course/440 )。

池化层

pooling 同样有步长,确定输出形状的公式,计算输出形状并初始化,max pooling 顾名思义就是取这个 pooling 大小区域内的 max 值。注意 axis=(2, 3)。

反向和 ReLU、DropOut 是类似的,也就是说只有刚才前向通过的才允许继续传递梯度。

max_mask 形状是 (HH, WW),为了和 x_padded_mask 形状对应也要扩展。然后 dout 和这个 temp_binary_mask 元素乘即可。同样注意 dout 是由 i,j 确定的,因此形状需要扩展。

以前我们做的 BN 形状是 (N, D),这里不过是将 (N, C, H, W)reshape 为 (N*H*W, C)。

最后进入 TensorFlow

这里强调一点,在使用 BN 时请务必注意:在你的优化器上套上下面图中的两行代码,另外需要注意 tf.layers.batch_normalization() 中的 is_training(是一个 tf.placeholder)在训练和测试时的设置,如果要使用 dropout 也是类似的。

以上就是本次的课后作业指导分享。

AI 慕课学院提供本次视频回放(http://www.mooc.ai/open/course/440 ),欢迎观看。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-02-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI研习社 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
NLP 服务
NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档