深度学习的数学
本文为学习了涌井良幸和涌井贞美所著的《深度学习的数学》后的读书笔记及总结。
第一章 神经网络的思想
1-1 神经网络和深度学习
本节主要讲解了生物领域中神经元的主要特点:
- 多个神经元可以形成网络
- 输入信号如果小于某个阈值则神经元不作出反应
- 输入信号大于某个阈值时神经元点火及作出后续反应
- 输入信号源自多个神经元,输入信号为多个神经元的总和且每个信号的权重不同
1-2 神经元的数学表示
w1x1+w2x2+w3x3(1)
其中$w_1、w_2、w_3 $ 是x1、x2、x3对应的权重。
是否点火可以用单位阶跃函数来表示:
y=u(w1x1+w2x2+w3x3−θ)(2)
其中θ为点火的阈值。
阶跃函数为:
u(z)={01(z<0)(z⩾0)(3)
1-3 **函数:将神经元的工作一般化
上一节中运用了**函数来表示神经元是否点火,但是这对于真实世界太过简单,因此通过修改**函数来将神经元的工作一般化:
y=a(w1x1+w2x2+w3x3−θ)(4)
此时为了与生物中的神经元区别开来,我们将简化、抽象化的神经元(非生物领域的)成为神经单元:
其中神经元与神经单元的区别为:
|
神经元 |
神经单元 |
输出值y
|
0或1 |
模型允许的任意数值 |
**函数 |
单位阶跃函数 |
*给定,较为著名的是Sigmoid函数 |
输出解释 |
点火与否 |
反映度、兴奋度等 |
为了将公式(2)更加抽象化,书中将阈值θ及其前面的符号替换为偏置b.
1-4 什么是神经网络
将神经单元连接成网络状,就形成了神经网络。
神经网络可以分为输入层、隐藏层(中间层)、输出层:
- 输入层:将从数据得到的值原样输出。
- 中间层:做公式(4)的运算。
- 输出层:做公式(4)的运算,显示计算结果。
深度学习就是叠加了很多层的神经网络。
这一节中举了一个具体的例子,利用神经网络识别4*3像素的0和1手写图像,非常形象和直观。
1-5 用恶魔来讲解神经网络的结构
书中用恶魔来举例子,形象地说明了隐藏层在特征提取中的作用。
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
书中的隐藏层共有3个神经单元A,B,C,他们分别对应(4,7)、(5,8)、(6,9)。输出共有两个神经单元,分别是输出单元0和1。
读者可以将这个表想象成一张纸,在这张纸上写0和1,当然1只能写在中间,写的时候只能涂黑方格。当写1时,5和8大概率会被涂黑,而写0时4,7和6,9大概率会被涂黑。
因此神经单元A和C 兴奋且B不兴奋时时,结果大概率是0,而当神经单元B兴奋、A和C不兴奋时,结果大概率时1.
1-6 将恶魔的工作翻译为神经网络的语言
书中利用的是全连接神经网络,既输入层的12个神经单元都会和隐藏层的3个神经单元连接,因此输出单元对特征提取贡献的作用大小设置不同的权重。
为了忽略无用甚至启反作用的信号,设置了偏置。
1-7 网络自学习的神经网络
神经网络的参数有权重和偏置,其确定方法分为有监督学习和无监督学习。
有监督学习需要数据既训练数据。
学习的思路为:计算预测值与正解之间的误差,通过一定方法得到误差总和最小权重和偏置(最优化)。
误差总和被称为代价函数,用CT表示,代价函数(Cost function)有多种选择。
第二章 神经网络的数学基础
2-1 神经网络所需的函数
-
一次函数
-
二次函数
-
单位阶跃函数
-
Sigmoid函数
σ(x)=1+e−x1(5)
Sigmoid函数与单位阶跃函数比较像,但其是光滑的。
- 正态分布的概率密度函数
f(x)=2π1e−2σ2(x−μ)2(6)
2-2 有助于理解神经网络的数列和递推关系式
-
数列及递推公式
-
联立递推关系式
误差反向传播法就是将这种递推关系式应用在神经网络中。
2-3 神经网络中经常用到的Σ符号
- 其含义是求和
- 具有线性性质
2-4 有助于理解神经网络的向量基础
本节主要讲解了向量的基础知识。
-
向量是具有方向和大小的量,用箭头表示。
-
可以用坐标的形式表示向量。
-
向量的大小
-
向量的内积
-
柯西-施瓦茨不等式
−∣a∣∣b∣⩽a⋅b⩽∣a∣∣b∣(7)
此不等式的成立可以得出:当两个向量相反时,内积取得最小值,在后续的梯度下降法中会用到这一性质。
-
张量(tensor)是向量概念的推广
书中用物理学中的张力来说明,即一个向量在不同的法向下具有不同的表示,并将其合并成为矩阵。
2-5 有助于理解神经网络的矩阵基础
-
较为简单的矩阵基础知识:和、差、常数倍、乘积。
-
Hadamard乘积
A=(2178),B=(2183)A⊙B=(2⋅21⋅17⋅88⋅3)=(415624)(8)
-
转置矩阵:行列互换
2-6 神经网络的导数基础
本节主要讲解了导数的基本定义以及求导公式。
Sigmoid函数的求导公式:
σ′(x)=σ(x)(1−σ(x))(9)
2-7 神经网络的偏导数基础
-
关于某个特定变量的导数称为偏导数
-
多变量函数取得最小值的必要条件:
函数z=f(x,y,z)取得最小值的必要条件是∂x∂f=0、∂y∂f=0、∂z∂f=0
-
书中还提到了拉格朗日乘数法,是高数中常用到的方法。
2-8 误差反向传播法必须的链式法则
-
单变量函数的链式法则
当y为u的函数,u为v的函数,v为x的函数时:
dxdy=dudydvdudxdv(10)
-
多变量函数的链式法则
变量z为u,v的函数,如果u,v分别是x,y的函数,则z为x,y的函数:
∂x∂z=∂u∂z∂x∂u+∂v∂z∂x∂v(11)
2-9 梯度下降法的基础:多变量函数的近似公式
-
单变量函数的近似公式:
f(x+Δx)=˙f(x)+f′(x)Δx(12)
其中Δx为微小的数。
-
多变量函数的近似公式:
f(x+Δx,y+Δy)=˙f(x,y)+∂x∂f(x,y)Δx+∂y∂f(x,y)Δy(13)
其中ΔxΔy为微小的数。
-
近似公式的向量表示:
定义:
Δz=f(x+Δx,y+Δy)−f(x,y)(14)
则:
Δz=˙∂x∂zΔx+∂y∂zΔy(15)
定义:
∇z=(∂x∂z,∂y∂z)(16)
ΔX=(Δx,Δy)(17)
则有:
Δz=∇z⋅ΔX(18)
2-10 梯度下降法的含义与公式
-
梯度下降法:通过慢慢移动图像上的点进行摸索,从而找出函数的最小值。
-
梯度下降法主要的思想是运用两向量方向相反时,其内积最小。
当f(x+Δx,y+Δy)不是最小值时,由公式(14)可知f(x+Δx,y+Δy)必定会小于f(x,y),这就使得Δz越小越好。文中将$\nabla z 和\Delta X看作两个向量,当两者方向相反时\Delta z$有最小值。因此梯度下降法的基本式为:
(Δx1,Δx2,⋅⋅⋅,Δxn)=−η(∂x1∂f,∂x2∂f,⋅⋅⋅,∂xn∂f)(19)
其中将∇称为哈密顿算子,定义∇f:
∇f=(∂x1∂f,∂x2∂f,⋅⋅⋅,∂xn∂f)(19)
则有:
Δx=−η∇f(20)
其中η为正的微小常数。
-
η的含义:可看做“步长”,恰当的确定其值是一个重要的问题。神经网络中称为学习率。
2-11 用Excel体验梯度下降法
本节主要讲解了如何用Excel计算梯度得到函数的最小值,实验内容不过多赘述。
本节中对η做了进一步的严格,在公式(19)中,η不能称为严格意义上的步长,因为∇f也有大小,需要将其变形为单位向量使其仅表示方向:
Δx=−η(∂x1∂f)2+(∂x2∂f)2+⋅⋅⋅+(∂xn∂f)2∇f(21)
2-12 最优化问题和回归分析
- 最优化问题:对神经网络的参数(权重和偏置)进行拟合,使得神经网络的输出和实际数据相吻合。
- 代价函数(Cost Function):利用平方误差的总和进行最优化的方法称为最小二乘法。
第三章 神经网络的最优化
3-1 神经网络的参数和变量
- 参数:确定数学模型的常数
符号 |
含义 |
xi |
表示输入层(层1)的第i个神经单元的输入的变量。由于输入层的神经单元输入和输出为同一值,所以也表示输出的变量。此外也作为神经单元的名称使用。 |
wjil |
从层l−1的第i个神经元指向层l的第j个神经元的箭头的权重。(可以看成上下标的后一位指向前一位,即wj,il,l−1)这是神经网络的参数
|
zjl |
表示层l的第j个神经单元的加权输入的变量 |
bjl |
层l的第j个神经单元的偏置。这是神经网络的参数
|
ajl |
层l的第j个神经元的输出变量,也可以作为神经单元的名称使用。 |
- 此外,学习实例不仅只有一个,当第k个学习实例时,各个变量的值可以表示为:xi[k]、zjl[k]、ajl[k]
3-2 神经网络的变量的关系式
神经网络的变量之间的关系可以用矩阵表示:
⎝⎛z12z22z32⎠⎞=⎝⎛w112w212w312w122w222w322w132w232w332⋅⋅⋅⋅⋅⋅⋅⋅⋅w1−122w2−122w3−122⎠⎞⎝⎜⎜⎜⎜⎜⎜⎜⎜⎛x1x2x3⋅⋅⋅x12⎠⎟⎟⎟⎟⎟⎟⎟⎟⎞+⎝⎛b12b22b32⎠⎞(23)
3-3 学习数据和正解
-
何为正解
|
预测的值 |
预测的值 |
|
图像为0时 |
图像为1时 |
a13 |
接近1的值 |
接近0的值 |
a23 |
接近0的值 |
接近1的值 |
-
可以对照输出变量a13、a23定义变量t1、t2
3-4 神经网络的代价函数
- 最优化的基础:代价函数的最小化。
- 神经网络的代价函数是将所有学习实例的误差加和。
- 学习数据的规模必须大于数学模型参数的个数。
3-5 用Excel体验神经网络
主要讲解了如何用Excel确定神经网络的参数。
第四章 神经网络和误差反向传播法
4-1 梯度下降法的回顾
- 目前已知的求函数最小值的通用方法是求变量和偏导数使其为0,但是对于神经网络来说,这是十分困难的,因为权重和偏置的总数十分的庞大。例如书中给的例题,学习样例有64个,代价函数是每个样例函数的总和,要确定的参数有47个,这就需要47个方程联立。使用梯度下降法时,只需要利用公式(21)进行反复的迭代,每次对变量做微小的变化,从而找到最小值。但是这种方法也存在着问题就是在实际的计算过程中十分的困难,例如在求解∂w112∂Ck时需要进行两项5层的链式法则,之后要将64项累加。
-
梯度分量是一个一个学习实例的简单的和:先求出偏导数,再带入实例计算。
4-2 神经元误差
-
神经单元误差定义为
δjl=∂zjl∂C(24)
定义神经单元误差的意义是为了后续计算中减少导数计算的次数。
-
用神经单元误差表示权重和偏置的偏导数
∂wjij∂C=δjlail−1,∂bjl∂C=δjl(l=2,3,⋅⋅⋅)(25)
神经元误差表示的是神经单元的加权输入给平方误差带来的变化率,如果神经网络符合数据,根据最小值条件,变化率应该为0,可以认为神经元误差表示的是神经网络与符合数据理想状态的偏差。
4-3 神经网络和误差反向传播法
- 反向递推关系式:
δil={δ1l+1w1il+1+δ2l+1w2il+1+⋅⋅⋅+δml+1wmil+1}a′(zil)(26)
此公式将导数计算的次数减少至一次,只计算最后一层的导数,套用公式(26)进行递推。
第五章 深度学习和卷积神经网络
5-1 小恶魔来讲解卷积神经网络的结构
-
卷积神经网络的隐藏层包括卷积层和池化层。
-
卷积神经网络和普通神经网络的不同之处在于“恶魔”会积极地扫描图像,从中找出偏好的模式,书中称之为“小恶魔”。
-
卷积神经网络的“小恶魔”与普通神经网络的“恶魔”均只有一个偏好模式。
此图为小恶魔S的偏好模式S。(S为Slash(/)的首字母。)
那么如何计算卷积,书中用下图进行了说明:
通过将小恶魔S在手写2上不断移动,并计算重合格子的个数,例如红色方格的结果是2,蓝色是1。横向每次移动一格,横向可移动4次,每移动4次后,下移一格,继续从右至左移动4次,因此一共可以移动16次,得到一个4*4的矩阵,这就是卷积的结果,也被称为体征映射。
得到的矩阵作为卷积神经单元的输入,通过**函数得到卷积神经单元的输出。
假设图为m*m,小恶魔为n*n,卷积之后得到的矩阵维数为:(m-n+1,m-n+1)。(待验证)
进行了卷积计算之后需要进一步进行池化,书中取了最大池化法,将卷积层分为互不重叠的4个区域,选出每个区域的最大值。
5-3 卷积神经网络的变量关系式
-
各层的含义以及变量名、参数名
通过学习卷积神经网络的变量名和参数名可以加深对其的理解。
位置 |
符号 |
含义 |
输入层 |
xij |
神经单元中输入的图像像素(i行j列)的值。与输出值相同 |
|
wijFk |
用于建立第k个特征映射的过滤器的i行j列的值。 |
卷积层 |
zijFk |
卷积层第k个子层的i行j列的神经单元的加权输入。 |
|
bF.k |
卷积层第k个子层的i行j列的神经单元的偏置。 |
|
aijFk |
卷积层第k个子层的i行j列的神经单元的输出。 |
池化层 |
zijPk |
池化层第k个子层的i行j列的神经单元的加权输入。 |
|
aijFk |
池化层第k个子层的i行j列的神经单元的输出。 |
输出层 |
wk−ijOn |
从池化层第k个子层的i行j列的神经单元指向输出层第n个神经单元的箭头的权重。 |
|
zno |
输出层第n个神经单元的加权输入。 |
|
bnO |
输出层第n个神经单元的偏置。 |
|
anO |
输出层第n个神经单元的输出(**函数的值)。 |
这里要注意的是,卷积层和池化层的k代表的是不同的过滤器也就是“小恶魔”而不是第k个训练实例。
5-4 用Excel体验卷积神经网络
不过多赘述。
5-5 卷积神经网络和误差反向传播法
-
卷积层:
⎩⎪⎪⎪⎨⎪⎪⎪⎧zijFk=w11Fkxij+w12Fkxij+1+w13Fkxij+2+w21Fkxi+1j+w22Fkxi+1j+1+w23Fkxi+1j+2+w31Fkxi+2j+w32Fkxi+2j+1+w33Fkxi+2j+2+bFkaijFk=a(zFk)(27)
此时的权重就是过滤器小方格中的值,过滤器在原图像数据上移动,重叠的部分进行乘积,然后累加。
-
池化层:
这里以最大池化为例:
{zijPk=Max(a2i−1,2j−1Pk,a2i−1,2jPk,a2i,2j−1Pk,a2i,2jPk)aijPk=ZijPk(28)
池化层是对卷积层进行的压缩,且输入等于输出。
-
输出层:
⎩⎪⎪⎪⎨⎪⎪⎪⎧znO=w1−11Ona11P1+w1−12Ona12P1+w1−21Ona21P1+w1−22Ona22P1+w2−11Ona11P2+w2−12Ona12P2+w2−21Ona21P2+w2−22Ona22P2+w3−11Ona11P3+w3−12Ona12P3+w3−21Ona21P3+w3−22Ona22P3+bnoanO=a(zno)(n=1,2,3)(29)
-
梯度下降法
书中之前的章节介绍了梯度下降法的基本原理,难点在于求解代价函数与参数的偏导数,在书中构建的(本节一开始的图)卷积神经网络*有69个需要确定的参数,因此就有69个偏导数分量,其中关于_卷积层神经单元的偏重的偏导数分量有27个,偏置3个,关于输出层神经单元的权重的偏导数分量36个,偏置3个。
-
神经单元误差
在卷积神经网络中,神经单元误差共有两种,分别是卷积层和输出层:
δijFk=∂zijFk∂C,δnO=∂znO∂C(30)
递推式:
δijFk={δ1Owk−i′j′O1+δ2Owk−i′j′O2+δ3Owk−i′j′O3}×(当aijFk在区块中最大时为1,否则为0)×a′(zijFk)(31)
总结
《深度学习的数学》一书从生物中的神经元入手,通过对其抽象引入了数学意义上的神经单元,基于此展开了对神经网络数学概念的阐述。首先书中讲解了最为基础的向量、矩阵、导数和数列4个基本概念,之后介绍了梯度下降法和误差反向传播法。读者在学习梯度下降法时会发现其运用了“两向量方向相反时,内积最小”的思想、在学习误差反向传播法时会发现“数列递推关系式”的方法运用在其中。最后,识别手写数字的例子贯穿全书,运用该例演示了基本神经网络和卷积神经网络的各自的工作方法,直观易于接受。
书中使用的Excel示例文件可以从以下链接下载。
《深度学习的数学》Excel示例文件