深度学习读书笔记

date
Oct 23, 2021
slug
deeplearning1
status
Published
tags
学习
summary
学习我妻幸长《写给新手的深度学习》的笔记
type
Post

神经网络

在神经网络中,可以将网络分为输入层、中间层(隐藏层)和输出层三种神经层
正向传播:从传递输入信息到产生输出的过程
反向传播:从输出想输入逆向传递信息的过程
u = np.dot(x,w) + b
神经网络处理的问题大致为:回归问题、分类问题

负值的权重:
突触可以分为化学突触和电突触,一般情况下,我们所说的突触大多是指化学突触
化学突触分为兴奋性突触和抑制性突触,可以将取值为负数的权重看作是抑制性突触

回归和分类

回归问题:根据数据变化的趋势对连续性数值进行推测
分类问题:将数据分别归类到事先确定好的多个类别中

激励函数

  • 阶跃函数:从最早的神经网络的雏形认知机开始就一直被沿用至今
  • sigmoid函数:变化平滑,可以将0与1之间的情况表现出来。此外,该函数方便用微分进行计算
  • tanh函数:-1与1之间平滑变化的函数
  • ReLU函数:线性整流函数,只有当x>0时才会上升的激励函数。ReLU函数比较简单,即使网络层次数量增加也可以比较稳定地进行学习。在最新的深度学习应用中,ReLU函数主要被当作输出层以外的激励函数使用。微分值不随x值而改变,且可以获取稳定的值。
  • Leaky ReLU函数:在负数区域中增加一个小的梯度,避免dying ReLU现象
  • 恒等函数:经常在神经网络的输出层使用,经常在处理回归问题时被用到
  • SoftMax函数:可以表示神经元被分类到所对应类别的概率
def StepFunction(x):
	return np.where(x<=0, 0, 1)

def SigmoidFunction(x):
	return 1 / (1 + np.exp(-x))

def TanhFunction(x):
	return np.tanh(x)

def ReluFunction(x):
	return np.where(x<=0, 0, x)

def LeakyReluFunction(x):
	return np.where(x<=0, 0.01x, x)

def SoftmaxFunction(x):
	return np.exp(x) / np.sum(np.exp(x))

权重与偏置的影响

权重的值代表着相对应的输入给予其影响的大小。当权重接近0时,受到的影响小;当权重大于0且数值越大时,收到的影响也随之增大。如果权重是负数,收到的影响就会反转
偏置的值对神经元是否容易产生兴奋起着决定性的作用

赫布学习法则

Hebbian Theory:当突触的前神经细胞产生的兴奋可以使突触的后神经细胞产生兴奋时,该突触的能量传递效果就会得到增强。反之,如果在较长时间内都没有兴奋产生,该突触的能量传递效率就会衰减。 赫布学习法则是关于大脑神经突触可塑性的法则。可塑性是指对发生变化的状态进行保存的一种性质。 研究人员认为赫布法则所定义的突触可塑性与长时期记忆之间存在着密不可分的关系。 Δw = η * y_i * y_j

Delta学习法则

  • 如果输出与正确答案之间的差值越大,则需要设置的权重的修正量也越大
  • 如果输入越大,则需要设置的权重的修正量也越大
Δw = η * (y_j -t) * y_i

反向传播

反向传播:通过将输出和正确答案的误差在网络中进行逆向传递,实现对网络的权重和偏置的最优化处理。

损失函数

损失函数:对输出与正确答案的误差进行定义的函数
  • 平方和误差:平方和乘以1/2,是为了方便之后对其进行微分计算。由于平方和误差适用于计算正确答案与输出为连续数值的处理,因此适用于解决回归问题
  • 交叉熵误差:将输出y_k的自然对数与正确答案的乘积的总和转换为负数,是对两个分布之间的偏离程度进行表示的一种尺度,适用于分类问题。从y = - logx图像中可以看出,当输出值与正确答案之间出现较大的偏差时,误差会趋近于无穷大。因此,使用交叉熵的优点之一是,当输出值与正确答案之间的差距较大时,学习速度也更快。
def SquareSum(y, t):
	return 1.0/2.0 * np.sum(np.square(y - t))

def CrossEntropy(y, t):
	return -np.sum(t * np.log(y + 1e-7))

梯度下降法

w = w - η * 偏E / 偏w
b = b - η * 偏E / 偏b
在进行正向传播的过程中,是对网络层的输出进行传播;在反向传播的过程中,则是对输入的梯度进行传播
权重的梯度:
notion image
偏置的梯度:
notion image
输出层的输入梯度:
notion image
输出神经元的反向传播:
中间神经元的反向传播:

回归问题中的梯度计算方法

损失函数:平方和误差
中间层的激励函数:sigmoid函数
输出层的激励函数:恒等函数
notion image
notion image

分类问题中的梯度计算方法

损失函数:交叉熵误差
中间层的激励函数:sigmoid函数
输出层的激励函数:SoftMax函数
notion image

最优化算法

梯度下降法根据梯度对权重和偏置进行调整,从而逐步减少误差,并最终实现神经网路的最优化。而最优化算法就是为了实现这一最优化处理而使用的具体算法。
最优化算法:
  • 随机梯度下降法(SGD)
  • Momentum
  • AdaGrad
  • RMSProp
  • Adam

随机梯度下降法(SGD)

SGD:在每次更新时,随机选择样本的一种算法
优点:在每次更新时从训练数据中随机抽取样本,不容易陷入局部最优解;通过将学习系数与梯度相乘来简单地确定更新量
缺点:在学习过程中无法对更新量进行灵活调整

Momentum

Momentum算法在随机梯度下降法中增加了惯性项
优点:通过加入的αΔw这一惯性项,可以有效地方志更新量的急剧变化,使更新量的变化曲线更加平滑

AdaGrad

优点:能够对更新量进行自动调整。随着学习的推进,学习率会逐渐减少
因为h是根据每个权重进行计算的,因此对于之前更新量的总和比较小的权重,所产生的新的更新量也会较大;而之前总的更新量比较大的权重,所产生的新的更新量则会较小。这样,便实现了在一开始对比较大的范围进行探索,然后逐渐将范围缩小的效果,实现更为高效的探索。
notion image

RMSProp

RMSProp算法克服了AdaGrad算法中由于更新量变小而导致的学习进度停滞不前的问题,通过设置ρ对过去的h以适当的比例进行遗忘,推荐将ρ设置为0.9左右的值
notion image

Adam

大致可以将Adam看作是Momentum和AdaGrad算法组合形成的,推荐使用的设置是β_1=0.9,β_2=0.999,η=0.001
notion image

epoch与批次

完成一次对所有训练数据的学习被称为一轮epoch。实际进行学习是,是将多个训练数据的样本集中在一起进行学习,这些样本的集合被称为批次。一轮epoch中使用的训练数据可以分割成多个批次进行学习。
批次尺寸指一个批次中所包含的样本的数量。由于是将批次内所有的样本都使用完毕再对权重和偏置进行更新操作,因此批次尺寸也可以说是对权重和偏置进行修正处理的间隔。

批次学习

批次学习:批次尺寸是全部训练数据的数量,在每轮epoch中,对全部训练数据的误差求平均值,并对权重和偏置进行更新。
优点:比较稳定,与其他两种学习方式相比速度更快
缺点:容易陷入局部最优解

在线学习

在线学习:批次尺寸为1的学习,以每个样本为单位,对权重和偏置进行更新

小批次学习

小批次学习:将训练数据分割为较小的块(批次),然后以这个较小的块为单位对权重和偏置进行更新操作。

矩阵计算

网络层输入:h * m 批次尺寸 * 传递到网络层的输入数量
网络层输出:批次尺寸 * 网络层的输出数量(网络层中的神经元数量)
正确答案:批次尺寸 * 正确答案的数量
用矩阵Δ来表示δ,形状为:h * n (批次尺寸 * 神经元数量)
grad_w = np.dot(x.T, delta)
grad_b = np.sum(delta, axis=0)
grad_x = np.dot(delta, w.T)

多层化带来的问题

多层化带来的问题:
  • 陷入局部最优解
  • 过拟合
  • 梯度消失
  • 学习时间过长
解决方案:
  • 更换所使用的最优化算法
  • 批次尺寸的最优化
  • 对超参数的最优化:神经网络的层数、神经元的个数、学习系数
  • 正则化
  • 对权重初始值的最优化
  • 提前终止
  • 数据扩张
  • Dropout
  • 数据的预处理

正则化

正则化:指对权重加以适当限制。
在对权重进行限制的方法中,对权重设置上限和使权重产生衰减是比较典型的做法
对权重加以限制:将加到某个神经元的输入上的权重的平方和收敛到一定程度
对权重进行衰减处理:将误差加上权重的平方和(平方范数、L2范数),使权重值随着误差一起产生衰减

数据的预处理

正规化:对数据进行转换,使其在一定范围内收敛
def Normalize(x):
	x_max = np.max(x)
	x_min = np.min(x)
	return (x - x_min) / (x_max - x_min)
标准化:标准差是对数据离散程度的一种度量。通过加工使数据的平均值为0、标准差为1,数据的绝大部分都被收敛在-1到1的范围内,但一部分数据会超出这个范围。经过标准化处理并不意味着数据就会变成正态分布
def Standardize(x):
	ave = np.average(x)
	std = np.std(x)
	return (x - ave) / std
去相关化:当集中的数据之间存在着某些关系时,将相关关系剔除
白化:对数据进行标准化和去相关化处理后,得到的结果就是被白化加工的数据
Dropout:按照一定的概率随机消除输出层以外的神经元。每次对权重和偏置进行更新所消掉的神经元都是不同的,使用Dropout方法进行学习的网络从本质上讲是将多个彼此不同的神经网络组合在一起进行学习。像这种使用多个模型的组合实现提升其结果质量的效果,在机器学习中被称为向上采样效果。

卷积层

卷积层:通过对图像进行卷积运算,可以对图像的某个特征进行选择性地增强和减弱
notion image
由于卷积层以过滤器为单位对输入数据进行处理,因此相较于全连接层,其网络层之间的连接是局部性的
使用过滤器处理的图像区域,相当于初级视觉皮层中的单纯型细胞的感受野

池化层

池化层:池化层通常被设置在与卷积层相连接的下一层。池化层负责将图像的各个区域进行划分,并将各个区域的代表特征抽取出来
池化实际上就是对图像的模糊处理,因此对象位置的敏感度就降低了,即使对象的位置发生了些许变化,得到的结果也是相同的。池化层相当于初级视觉细胞中的复杂型细胞,对画面中物体的位置变化不敏感

全连接层

全连接层与全连接层之间的连接,与普通的神经网络中的神经层是一样的

填充

填充的目的之一就是确保经过卷积处理的图像大小能保持不变
经过填充后图像的边缘数据能够更多地参与卷积运算

反向传播

根据传播来的输出数据与正确答案之间的误差,对组成过滤器的各个值的梯度进行计算,然后对过滤器的值进行更新。对于偏差也是使用同样的方法进行更新。误差会通过卷积层继续被传递到更上层的网络中。
在池化层中是不进行学习处理的。不过,误差还是可以通过池化层被继续传递给位于更上层的网络层。
全连接层则与普通神经网络的网络层使用相同的方法对误差进行传播

im2col和col2im概要

im2col可以将用于表示图像的四维数组转换成矩阵;col2im可以将矩阵还原成用于表示图像的四维数组
在进行正向传播时使用im2col,在进行反向传播时使用col2im。im2col和col2im同样可以运用到池化层中

im2col算法

im2col:本质是将图像中的长方形区域转换成矩阵的列的一种算法

© Dino 2021 - 2022