[读书笔记] Neural Networks and Deep Learning Chapter 1

这是我阅读在线书籍《Neural Networks and Deep Learning》的笔记,这篇博文是第一章的。没什么营养,因为大部分都知道了,于是草草略过。

章节链接: http://neuralnetworksanddeeplearning.com/chap1.html

Introduction

科普。

words

  1. effortlessly:毫不费力地
  2. deceptive:欺骗性的
  3. superbly:雄伟地(文中表程度大)
  4. astoundingly:令人惊讶地
  5. stupendously:(同上)

科普。。

words

  1. morass:沼泽、困境
  2. caveats:警告

科普。。。讲下NN可以从一堆数据中学习到一些特征,然后去预测一些没见过的数据。并且数据越多效果越好。


介绍第一章要搞什么(手撸一个NN,用来识别手写数字,就74行),随后的章节要搞什么(想一些trick提升NN的acc之类)。

words

  1. intervention:介入、调停

手写数字识别这个问题简单,非常适合用来举例(大概这样可以把注意力更多地集中到NN本身之类?)。it’s challenging - it’s no small feat to recognize handwritten digits - but it’s not so difficult as to require an extremely complicated solution, or tremendous computational power.
(这是一项具有挑战性的工作——识别手写的数字绝非易事——但是拥有一个极其复杂的解决方案,或者是巨大的计算能力的话就不难了),之后会讲一些扩展。

words

  1. throughout:自始至终

这章的重点:

两类神经元:感知机(Perceptrons)sigmoid函数

神经网络的标准训练方法:随机梯度下降(Stochastic gradient descent, SGD)

Amongst the payoffs, by the end of the chapter we’ll be in position to understand what deep learning is, and why it matters.最后会讨论一下DL为什么会matters。


Perceptrons

感知机(http://books.google.ca/books/about/Principles_of_neurodynamics.html?id=7FhRAAAAMAAJ)是一类人工神经元,由科学家Frank Rosenblatt在上世纪50到60年代间完成。

不过目前非常流行的一类模型是神经网络(Neural Network),最重要的一部分是sigmoid(就个非线性函数)。

img

上图是个最原始感知机的神经元,嗯。

假设这个perceptron有三个输入x1,x2,x3,中间的圈里一系列权重w1,w2,w3。输入来的时候,我们首先做向量乘法sum=iwixi,然后要和一个阈值threshold比较得到output
output= \left{ \begin{array}{lll} 0, \ \ if\ sum \leq threshold \ 1, \ \ otherwise. \end{array} \right.


举个例子。

words

  1. transit:公共交通
  2. adore:崇拜、爱慕
  3. loathe:讨厌

img

每一列称之为层(Layer),第一层的三个神经元对输入分别以自己的权重进行处理(每层的处理就是向量乘积,最后获得一个值),得到的输出(可能不用threshold判断)再分别给第二层的每一个神经元,第二层的决策会更加复杂,因为第二层的输入是通过第一层抽象过的结果。

实际上每个神经元的输入可以有很多,但是输出都是一个。这么画是为了说明层与层之间是如何联系起来的。

words

  1. plausible:可信的
  2. subtle:微妙的
  3. engage:从事,参与
  4. sophisticated:复杂的
  5. incidentally:顺便,附带地

把上述神经元的计算过程简化下:
output= \left{ \begin{array}{lll} 0, \ \ if\ \omega\cdot x+b \leq 0 \ 1, \ \ otherwise. \end{array} \right.


b就是bias,也是threshold。表示一种“输出1”的测量(the bias as a measure of how easy it is to get the perceptron to output a 1. )。

words

  1. cumbersome:冗杂的,累赘的
  2. notation:标志、符号、记号
  3. reminder:剩下的

举了个简单的例子,说明感知机可以做与、或、非之类的逻辑操作:

img

上图就是一个与非门,实际上感知机能做任何逻辑操作(因为这东西可以实现一切基本逻辑操作,那么就像连电路一样把那些门都连起来就行了)。

这是为了说明,感知机可以和其他计算设备一样强大。然而并非仅此而已,我们还可以在这个简单的模型上使用学习算法,使这个模型可以自己调整每一个神经元中的weights和bias,这种调节来自外部刺激(external stimuli),而非手动调整。

words

  1. equivalent:等价物
  2. notable:值得注意的

Sigmoid Neurons

先介绍更新权重的时候,可以表示成ω+Δω的形式,这样就可以学习了(当然都是向量)。也就是,我们希望每次output反过头过来传个值,然后更新这个网络。

但是上述的naïve perceptron在输出的时候都会经过一个突变函数(非零即一),通过这个门以后后面的神经元就完全没法恒量差别了(就像雅思)。

引出sigmoid:

img

这里output为σ(z)11+ez=11+exp(jwjxjb)

这样做的好处是对之前用的step function做了平滑处理,使得变化看起来不会过于激烈。看看原文是如何解释的:

The smoothness of σ means that small changes Δwj in the weights and Δb in the bias will produce a small change Δoutput in the output from the neuron.

就是说变化后的w和b在处理完输入接着输出到output的时候,使得output的变化不至于太剧烈,output可以近似为下面的值:
ΔoutputjoutputwjΔwj+outputbΔb


确实可以用微分来解释,因为output是一个n元一次线性方程,那么对它微分就是各项偏导之和,而微分的几何意义就是表示偏移量(变化量)的。

我们需要有一个平滑函数σ来简化运算,由于指数在微分时的性质(无限可微),所以构造了sigmoid函数作为激活函数(sigmoid还有一个著名性质就是导数可以用自身表达)。

如何解释经过sigmoid的输出?

最大的不同是:经过sigmoid平滑后,输出由原来的0或1变为[0,1]中任意实数(希望变成0 1的话直接设阈值max一下就ok)。

words

  1. terrific:可怕的
  2. property:性质、性能
  3. occasionally:偶尔、偶然地、不定期地
  4. legitimate:合法的
  5. convention:约定

Exercises

part I:证明感知机中所有w、b都乘一个大于0的常数c,这个网络的输出不会改变。

证:\mbox{output}= \left{ \begin{array}{lll} 0, \ \ if\ \omega\cdot x+b \leq 0 \ 1, \ \ otherwise. \end{array} \right.,乘一个整数不会影响。

part II:给一个感知机,对于任意输入x,都有ωx+b0。现在把所有神经元都替换成sigmoid神经元,再乘一个大于0的常数c,证明假如c趋于无穷大的时候,有sigmoid神经元的模型就会退化成没有sigmoid的网络。假如ωx+b=0的时候又会有什么不同?

(1). 证:c+,c>0时,可以分别将lim带入上述σ函数中求极限,发现分别收敛于0和1。

(2). 结果会输出0,而sigmoid会输出0.5,是不一样的。


The architecture of neural networks

img

上图是一个网络,从左到右开始,第1层叫输入层(input layer),每个元素叫输入神经元;第2层叫隐层(hidden layer),未必只有一层;第3层叫输出层(output layer)。

img

有多层的网络有时候也被称作“多层感知机”,这是有历史原因的。所以现在完全可以认为NN=MLP(MLP里的感知层(简单的线性操作)换成sigmoid)。

然后介绍识别手写数字的任务,提到最简单的构建NN的方法就是把一张图片(例如64×64)的灰度信息直接保存(输入直接是4096维,当然要把灰度归一化到[0,1]内),然后走一遍网络取argmax。同时,hidden layer的设计会非常多样。

前馈神经网络:通常定义只允许前面的层向后面的层输出,不允许反过来(不允许有环)。但是现在已经有一些可以带环的网络(RNN)。

words

  1. terminology:术语
  2. philosophical:哲学的
  3. rules of thumb:经验法则(大拇指规则)
  4. heuristics:启发、尝试(法)

A simple network to classify handwritten digits

本科做过了这段懒得读了。

img

这个图挺帅,意思就是用一层hidden,然后输入是28×28=784维,然后最后输出10个分类的logits。

这里讨论了一个很有趣的问题:为什么输出是10个而不是4个(因为24=16>10可以表示所有我们希望的数字情况)?

个人认为隐层中每次处理后都会提取图像中的某一部分的特征,预测的时候被激活与否的影响因素为某部分是不是有这个特征,有某种特征对应0-9这十个数是很容易的,然而要对应二进制编码则很难表示。

words

  1. sake:利益、理由

Exercise懒得做了,只要对应好四个位置给权值就行了。


Learning with gradient descent

介绍mnist数据集,同时设计一些必要的环节:

cost functionC(w,b)12nx|y(x)a|2.(均方误差),训练过程中的目标是最小化cost function

然后讲梯度下降:

ΔCCv1Δv1+Cv2Δv2. 我们的目标是希望使ΔC变负,Δv1,Δv2分别是两个不同方向的偏移量。因此可以说ΔC是两个方向偏移量的叠加。

定义梯度向量:C(Cv1,Cv2)T.

所以化简后,变化量可以表示成:ΔCCΔv.

定义Δv=ηCη是一个极小的正数(学习率),ΔCηCC=η|C|2ΔC0恒成立知,C是一个只减不增的值,于是我们在算出的ΔC(我们希望让ΔC一直是负数,也就是C一直下降)的同时,算出v移动后的位置v=vηC

img

就像这个绿球一直往地势低的地方滚,直到最低点(极低点)为止。

m维的向量空间,C的定义会得到扩展:
C(Cv1,,Cvm)T


(对于Δv中的每维变量,都会有一个对应的梯度去更新它。)

通常训练神经网络的工作都是面对这样一个最优化问题,梯度下降算法可以看做是一个采用最少步骤使得C下降的一个方法。

words

  1. quadratic:二次的
  2. ah-doc:特别的
  3. recap:翻造、重申
  4. distract:转移、分心
  5. lurk:潜伏、埋伏、隐藏

Exercise

http://neuralnetworksanddeeplearning.com/chap1.html#exercises_647181

Part I. 证明上述的假设,即:当|v|=ϵ,Δv=ηC时,其中ϵ>0为很小的一个数,且当η=ϵ|C|时,ΔC=CΔv可以取到最小值。(也就是要证给定步长,我们沿着梯度的方向总能找到最小值)

证明:当ΔC=CΔv|v|=ϵ时,令Δv=ηC=(ϵ/|ΔC|)C,则有:
ΔC=CΔv =C(ϵ/|C|)C =C2(ϵ/|C|) =|C|2(ϵ/|C|) =ϵ|C| =|Δv||C|


由柯西-施瓦兹不等式,|u||v||uv|得,|Δv||C||ΔvC||Δv||C|必为最小值。

Part II. 给出一个在多维和一维情况下梯度下降的几何解释。

答:一维的话就退化成函数求导问题了,就是在一个曲线上找极小值,也就是一个圆点往地势低的地方滚。


接近物理学球下滚模拟的变种算法不可避免地需要求二阶偏微分,十分复杂。因此书中会引出一些方法来避免这个问题(梯度下降)。

梯度下降的目标是最小化cost functionC(w,b)12nx|y(x)a|2.

反向更新的时候,这样来更新weights和biases:
wkwk=wkηCwk blbl=blηCbl.


但是有一个问题,原始的梯度下降里,这个目标函数实际上是在求C在不同x取值时的均值,也就是要把整个dataset都迭代一遍后再去反向传播。

随机梯度下降(Stochastic gradient descent,SGD)每次选取指定规模的mini-batch去做梯度下降,在mini-batch的大小m满足:
mj=1CXjmxCxn=C,


m个输入的平均值要接近于全体输入的平均值,SGD才可近似于naïve GD。

1539092769209

带入权值和偏移更新中,公式变成这样:
wkwk=wkηmjCXjwk blbl=blηmjCXjbl,


在SGD时,称把整个数据集经过mini-batch训练一遍为一个epoch,通常要来好几个epoch。

在算目标函数的时候不要忘记1n(用mini-batch的时候是1m),做一下平均(因为有可能后来添加数据,就是说数据规模不一定的时候会影响到)。

words

  1. incidentally:顺便地,偶然一提地
  2. convention:惯例,约定
  3. omit:省略、疏忽

Exercise

提到了mini-batch size=1的时候的一种极限情况。


Implementing our network to classify digits

介绍数据集,和要实现的神经网络。稍微读下代码,其他没什么好看的。


Toward deep learning

又是一些废话。

Code 401: 未经授权的操作,请检查你的AppId和AppKey.
Powered By Valine
v1.5.2