【BitTiger读书会简介】
BitTiger读书会,以书会友。以报告方式,加强组织表达力;以讨论方式,激荡思考判断力,期能扩充知识领域,养成读书习惯。
每周一本好书,一年阅读50本书,集众智,挑好书,留精华内容,创优质社群。
BitTiger读书会,欢迎您的加入!
在上一期的活动中,卢开颜和我们一起分享了《像外行一样思考,像专家一样实践——科研成功之道》这本书。在即将到来的第十四期中,我们将与Li Yuhan一起读《Fundamentals of Deep Learning 》(深度学习基础)这本书,感受深度学习的魅力。
【分享书籍】
【书籍介绍】
随着2000年以来神经网络的重新振作,深度学习成为一个非常活跃的研究领域,并且为现代机器学习铺平了道路。本书实用性很强,作者提供了很多实例以及清晰的解释,以帮助读者领会这个复杂领域中的基本概念。
【嘉宾介绍】
Li Yuhan, 现就职于某跨国投资银行任软件工程师。
【电子书下载】
FundamentalofDeepLearningNotes
【加入读书会】
获取BitTiger读书会系列读书分享信息,请添加微信ID: saraincs,备注“读书”加入BitTiger读书会活动群
【分享文稿】
Fundamentals of Deep Learning
作者介绍:
Nikhil Buduma: confounder and chief scientist at Remedy. Attended MIT
Nick Locascio: deep learning consultant for Fortune-500 corps. Attended MIT
本书简介:
随着2000年以来神经网络的重新振作,深度学习成为一个非常活跃的研究领域,并且为现代机器学习铺平了道路。本书实用性很强,作者提供了很多实例以及清晰的解释,以帮助读者领会这个复杂领域中的基本概念。
本书大概内容:
介绍机器学习和神经网络的基本概念。
学习如何训练feed-forward神经网络
运用TensorFlow建立一个神经网络
建立神经网络来分析复杂图像
运用自编码器
对语言的序列分析
深度强化学习的基本知识
Prerequisites:
基本的积分,矩阵和Python 编程知识,线性代数
代码:https://github.com/darksigma/Fundamentals-of-Deep-Learning-Book
第一章 神经网络
传统计算机在行的两件事:1. 数学计算 ; 2. 遵循指令
但是如何让计算机识别手写数字?
如何让计算机识别下图是6还是0?
很多类似的识别问题都归类于object recognition, , 语音识别,自动翻译等等。
回顾一下人类学习的历史: 我们小时候认识小狗并不是通过去测量小狗的鼻子或外形来确定这个物体是小狗,而是通过很多实例并不断被纠正来最终认识小狗。我们的大脑建立一个模型,这个模型在我们成长中不断take我们感官的输入,然后做猜测;如果猜测被父母证实了,那么模型被加强。
Deep Learning是machine learning的一个subset。 Machine learning里,我们不给计算机大量的rules来识别,而是通过给一个可以评估实例的模型,遇到错误判断的时候用一个small set of 指令去修改模型, 然后经过时间,这个模型能够精准的解决问题。
如果用公式来表达:
a function h (x, θ) x: 向量
问题来了:为什么deep learning或者machine learning里我们要用到矩阵,线性代数,数理统计这些??尤其是矩阵运算?为什么??
概念:linear perceptron
神经元:一粒米大小的脑组织包含超过10000个神经元。
生物神经元结构图:(科学家们由此得到机器学习的启发)
1943年提出的人工神经网络模型:
vector x = [x1 x2 … xn] : 输入
w = [w1 w2 … wn]: 加权值
y = f (x・w)+ b , b: 偏差
思路重点:神经元的活动是一系列矩阵操作。
Feed-Forward 神经元网络
特点:
同层之间没有神经元链接。低层向高层链接。每层不一定要有相同数目的神经元。输入和输出都用矢量来表示。Hidden layer常常比输入层的神经元要少。
第二章 训练Feed-Forward神经网络
问题: 我们如何来确定参数,以及参数的加权值?
回答:通过“训练” (training)
给神经网络大量的训练实例,循环性的修改加权值以最小化错误。
例子:
任务:通过一个模型确定一顿饭要花多少钱。
输入变量:每顿饭包括汉堡,薯条和苏打水,每顿饭的总价格
目标:我们希望给模型输入足够的例子后,模型能预测每顿饭的价格。
如何评价模型:
t(i): 真实的答案,y(i): 神经网络产生的值,E越小越好,当E=0的时候,模型产生精准的预测。
梯度下降 (Gradient Descent)
模型所需的数据:
第三章 神经网络在TensorFlow里的运用
什么是TensorFlow?
Google 2015年发布的Python深度学习开源库。
TensorFlow与其他开源库的比较
Theano: University of Montreal. 需要搭建特殊的深度学习架构。比较复杂。主要面向research
Torch: Facebook AI Research, written in Lua。语言不够popular,对于初学者来说有一定难度。
TensorFlow:Python, interface干净简洁易懂,面向production。
接下来讲如何安装TensorFlow。
装完之后,建立TensorFlow的变量。这些变量用于建立模型。这些变量是in-memory buffers, 包含tensors, 必须在图第一次调用之前显式初始化。每次迭代后我们可以使用梯度方法去修改变量。我们可以把变量的值存到disk上以便以后使用。
例子:
weights = tf.Variable(tf.random_normal([300, 200], stddev=0.5),
name=“weights”)
tf.random_normal: 用正态分布初始化一个tensor
stddev=0.5: 标准偏差0.5
300X200:连接1层300 个神经元到1层200个神经元
Name=”weights”: unique identifier
建议一个不可训练的变量:
weights = tf.Variable(tf.random_normal([300, 200], stddev=0.5),
name=“weights”, trainable=False)
初始化一个变量的3个操作:
tf.initialize_all_variables(),会触发所有 tf.assign 的操作.
TensorBoard:图像化,可用于debugging
本章总结:主要介绍了如何安装TensorFlow, 举例说明了如果建立变量模型,以及multiple layers. 还介绍了如果enable GPU, CPU计算。
第四章 梯度下降
全局最小点
局部最小点
AdaGrad 算法:积累历史梯度。 在凸优化背景中,AdaGrad算法具有一些令人满意的理论性质。
RMSProp算法:修改AdaGrad以在非凸设定下效果更好,改变梯度积累为指数加权的移动平均。目前是深度学习从业者经常采用的优化方法之一。
Adam:另一种学习率自适应优化算法。可看作RMSProp和动量结合的变种。
第五章 卷积神经网络
如何让计算机识别一张人脸?传统方法靠像素识别行不通。
ImageNet比赛中,Alex Krizhevsky 靠卷积神经网络取得了优异的成绩。
卷积网络是一种专门用来处理具有类似网络结构的数据的神经网络。例如时间序列数据和图像数据。卷积是一种特殊的线性运算。
卷积运算通过三个重要的思想来帮助改进机器学习系统: 稀疏交互,参数共享,等变表示。
稀疏交互:例如处理图像时,输入的图像可能包含成千上万个像素点,但是我们可以通过只占用几十到上百个像素点的kernel来检测一些小的有意思的特征,例如图像的边缘。
参数共享:在一个模型的多个函数中使用相同的参数。
本章末,作者举了一个实例:对一个32X32像素的小狗图像运用卷积网络来做识别。值得自己试试。
第六章 嵌入的表示学习
表示学习:有很多任务,我们很难知道提取哪些特征。解决这个问题的途径之一就是使用机器学习来发掘表示本身,而不仅仅把表示映射到输出。表示学习算法只需要几分钟就可以为简单的任务发现一个很好的特征集。手动为一个复杂的任务设计特征需要耗费大量的人工时间和精力。
表示学习算法的典型例子是自编码器。自编码器是由一个编码器函数个一个解码器函数组合而成。编码器函数将输入数据转换成一种不同的表示,解码函数将这个新的表示转换到原来的形式。
一个好的自编码器:输入数据结果编码器和解码器后能保留尽可能多的信息,同时希望新的表示有各种好的特性。
降噪自动编码器:接受损坏数据作为输入,并训练来预测原始末被损坏数据作为输出的自编码器。
传统的自编码器最小化以下目标:
降噪自编码器最小化 是被某种噪声损坏的x 副本。因此降噪自编码器必须撤销这些损坏,而不是简单地复制输入。
可解释性:机器学习模型的一个重要特性
本章末用word2Vec Framework 结合TensorFlow举例说明了Skip-Gram模型。
第七章 序列分析模型
RNN: Recurrent neural network 循环神经网络,是一类用于处理序列数据的神经网络。循环layer包含循环链接,也就是说,神经元之间的链接在同一layer里。
循坏神经网络中一些重要的设计模式:
每个时间步都有输出,并且隐藏单元之间有循环链接的循环网络
每个时间步都产生一个输出,只有当前时刻的输出到下个时刻的隐藏单元之间有循环链接的循环网络
隐藏单元之间存在循环链接,但读取整个序列后产生单个输出的循环网络
第八章 记忆神经网络
神经网络图灵机: Neural Turing Machine, or NTM, 2014 年Graves提出一种新的神经架构,包含了controller neural network (通常是RNN)和外部存储器,相当于人脑工作记忆。下图显示了当前的计算机结构和NTM的架构对比。左边是计算机架构,右边是NTM。
DNC: Differentiable neural computer, 改善NTM。 与NTM相似,DNC包括一个controller,还有外部存储。 外部存储包括N words of size W, M=N x W。
第九章 深度强化学习
DQN:Deep Q-Network 是第一个large-scale 成功的加强学习的application.
强化学习的构架:包括一个环境,一个actor, 一个反馈信号。Actor选择在环境中take an action, 如何选择action – 根据policy。
马尔可夫决策过程 (Markov Decision Processes MDP)
S: 有限的可能状态集合
A: 有限的actions集合
P (r, s|′ s, a):状态转移方程
R:反馈函数
例子:蓝色圆圈:环境中的状态;红色方块:actions。蓝线:状态转移。蓝线上的数字:转移的概率。绿线数字: reward。
Deep Recurrent Q-Networks (DRQN)
Asynchronous advantage actor-critic (A3C): 2016年提出的对深度强化学习的新的方法。
UNsupervised REinforcement and Auxiliary Learning (UNREAL): 对A3C 的一个改进。