深度学习的基础概念、基础的数学原理学习记录
前言
这里是对深度学习的一些基本定义和公式原理作学习记录。
监督学习:
先用带标签的数据集合学习得到一个模型,然后再使用这个模型对新的样本进行预测。
基本概念
- 分类:得到离散值输出(属于哪一类)
- 回归:得到的连续值输出(具体数值)
- 泛化:对训练集和测试集的正确率都高(泛化能力强)
- 过拟合:对测试集正确率低(举一反三能力差)
- 欠拟合:对训练集正确率低(测试用的数据集再次检测都不对)
概率与概率分布
离散结果的建模情况
(0 or 1)
- 伯努利分布:是否为垃圾邮件?
- 多项分布:
- 泊松分布:整数的判断场景
连续结果的建模情况
正态分布
应用场景是:推测人群体重,预测考试成绩等…
非监督学习(不带标签)
聚类:物以类聚,人以群分
给定N个对象,将其分为K个子集,使得每个子集内的对象相似,不同子集之间的对象不相似。
数据变换:数据降维.[人脸图像]是高维数据,降低为[1,2,3,4]等像素数据集,为低维数据。
深度学习是机器学习领域下的一个分支,机器学习也是人工智能领域下的一个 分支。
深度学习的发展历史
深度学习是在神经网络基础上的进一步加深,层数更多
监督学习的发展史:
多层感知机------(增加多层结构)深度神经网络----------(增加卷积层)卷积神经网络
无监督学习的发展史:
受限玻尔兹曼机-------(增加多层结构)深度波尔茨曼机/深度信念网络
深度学习的训练过程示意图
卷积神经网络的各层解释
梯度下降:寻找全局最优解
卷积层 :得到边缘
池化层:(max-pooling)
缩减模型的大小,提高计算速度,同时提高所提取特征的鲁棒性。
最大池化:可以提取最大的特征,目前来说,最大池化比平均池化更常用!
池化层的超参数为:
f=2;过滤器尺寸
s=2;步幅
所以,池化层的超参数是最固定的,不需要训练学习中更改!不影响权重,是静态属性!
全连接层:(Fully connected layers)
全连接层在整个卷积神经网络中起到了分类器的作用。
卷积神经网络的优化方法
超参数:超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的数据。
梯度下降分类:
- 批量梯度下降:Batch Gradient Descent(BGD)
- 随机梯度下降:Stochastic Gradient Descent(SGD)
- 小批量梯度下降:Mini-batch Gradient Descent(MBGD)
线性回归:
h
θ
(
x
i
)
=
θ
1
x
i
+
θ
0
h_{\theta }(x^{i})=\theta _{1}x^{i}+\theta _{0}
hθ(xi)=θ1xi+θ0
J
(
θ
0
,
θ
1
)
=
1
2
m
∑
i
=
1
m
(
h
θ
(
x
i
)
−
y
i
)
2
J(\theta _{0},\theta _{1})=\frac{1}{2m}\sum_{i=1}^{m}(h_{\theta }(x^{i})-y^{i})^{2}
J(θ0,θ1)=2m1∑i=1m(hθ(xi)−yi)2
J
J
J代表的是预测值与实际值的差值,代表目标函数(损失函数),其中,
i
=
1
,
2
,
3...
m
i=1,2,3...m
i=1,2,3...m,这里的目标函数是所有样本误差和均值。系数中多个2是为了求导时把2次方约掉。我们的目的是使
J
J
J最小,此时
J
′
=
0
J^{{}'}=0
J′=0。训练的过程就是更新权值,找到函数最小值时的
(
θ
0
,
θ
1
)
(\theta _{0},\theta _{1})
(θ0,θ1)
训练过程的数学意义
神经网络在更新权值的时候需要先求得损失函数,再由损失函数求得各参数的梯度进行更新。使用梯度下降,实际就是求损失函数最小值的过程。用多少个训练样本去计算损失函数呢?用batch_size.更新参数时,用batch_size个样本来训练。
batch_size代表批量输入大小。m即batch_size,代表训练样本个数!
批次梯度下降法:batch_size=所有训练数据数量
随机梯度下降法:batch_size=1.每次仅用一个训练数据来更新权值。
小批量梯度下降法:1<batch_size<训练集。每次用部分数据来更新权值。
batch_size是超参数。
三种梯度下降算法的优缺点
BGD:收敛很快,但容易陷入局部最小值或鞍点,没法跳出来。测试集效果不好,泛化能力弱。一次使用全部训练数据,对显卡要求高!
SGD:能跳出局部最小值和鞍点;泛化能力强,但收敛比较慢。
MBGD:每次随机用几个数据(图片)进行更新,这几个训练数据并不完全符合训练集的规律,相当于引入了噪声,可以跳出局部最小值和鞍点,主要是batch_size的参数不好找,一般在2的幂上调参。
理想的梯度下降算法满足两点:
收敛速度要快,能全局收敛。
前向传播和反向传播
前向传播的公式:(训练集和测试集)
z
=
w
x
+
b
z=wx+b
z=wx+b
A
=
σ
(
Z
)
A=\sigma (Z)
A=σ(Z)
算法步骤:
- 前向计算每个神经元的输出值;
- 反向计算每个神经元的误差值;(根据标签)
实质:损失函数对神经元加权输入的偏导数 - 计算每个神经元权重的梯度!
前向传播:
从输入,经过一层层神经元,不断计算每一层的Z和A,最后得到
y
′
{y}'
y′,再根据与真实的
y
′
{y}'
y′的差,计算损失函数
l
o
s
s
loss
loss
反向传播:
根据损失函数
L
(
y
′
,
y
)
L({y}',y)
L(y′,y)来反方向计算每一层的
z
,
w
,
x
,
b
z,w,x,b
z,w,x,b的偏导数(梯度),从而更新参数。
这里的上标代表层数。
每经过一次前向传播和反向传播过后,参数就更新一次,然后用新的参数再次循环上面的过程。这就是神经网络训练的过程。
神经网络层数设置
图像输入层:每个训练数据是28*28像素的图片,共784个像素,因此,输入层节点数量是784,每个像素对应一个输入点。
输出层:节点数是确定的。若是10分类,可以用10个节点,每个节点对应一个分类。
隐藏层:数量设置有几个经验公式:
m
=
{
n
+
l
+
a
l
o
g
n
n
l
m=\left\{\begin{matrix} \sqrt{n+l} +a\\ \\ logn \\ \\ \sqrt{nl} \end{matrix}\right.
m=⎩
⎨
⎧n+l+alognnl
m
m
m:隐藏层个数
n
n
n:输入层个数
l
l
l:输出层个数
a
a
a:1到10之间的常数
线性回归与逻辑回归的区别
线性回归是为了拟合所有的数据。
逻辑回归是将y归一化,介于[0,1]之间的概率,主要为了分类。
神经元构建的逻辑步骤:
-
构建数据指标
比如说人的体重,身高等 -
线性回归
y = a 1 x + b 1 x + B y=a_{1}x+b_{1}x+B y=a1x+b1x+B -
sigmoid函数(逻辑回归)
P = 1 1 + e − y P=\frac{1}{1+e^{-y}} P=1+e−y1
正则化
过拟合是指模型包含参数过多,以至于对训练集预测的很好,但对未知数据预测很差的现象。
防止过拟合的方法有无限增大训练集的大小,但是无法做到,需要花费更多人力物力去实现。这时候便用得到正则化。
θ
0
+
θ
1
x
+
θ
2
x
2
\theta _{0}+\theta _{1}x+\theta _{2}x^{2}
θ0+θ1x+θ2x2
θ
0
+
θ
1
x
+
θ
2
x
2
+
θ
3
x
3
+
θ
4
x
4
\theta _{0}+\theta _{1}x+\theta _{2}x^{2}+\theta _{3}x^{3}+\theta _{4}x^{4}
θ0+θ1x+θ2x2+θ3x3+θ4x4
正则化中将保留所有的特征变量,但是会减小特征变量的数量级(参数数值大小)
正则化的目的是,使
θ
3
,
θ
4
\theta _{3},\theta _{4}
θ3,θ4为0,减少过多的参数。