深度学习——第一篇

目录

1 线性回归问题

1.1 损失函数

1.2 优化方法

1.3 训练过程

2 线性二分类问题

2.1 分类模型

2.2 损失函数

2.2.1 损失函数1——平方误差

2.2.2 损失函数2——对数损失

3 多分类问题

3.1 softmax回归

3.1.1 模型建立

3.1.2 损失函数

3.2 多层感知机

3.2.1 单神经元模型

3.2.2 感知机

3.2.3 多层感知机

4 模型训练相关问题


线性回归问题

在回归问题中,假设目标是输入特征的仿射变换(即通过加权和对特征进行线性变换,再通过偏置项进行平移),就是线性回归问题。对于一个样本集,包含的样本数为n,每个样本的特征数为d,即样本可以表示为XX\in\mathbb{R}^{n\times d},目的是找到权重w和偏置b,其中w\in\mathbb{R}^d,b\in\mathbb{R},使得预测值\hat{y}=Xw+b尽可能接近真实标签。

1.1 损失函数

为描述预测值与真实值的偏离程度,需要定义一个损失函数,该函数值越小表示预测越准确。这里损失函数采用均方误差函数,即n个样本的误差平方的平均数,为了求导方便乘以系数\frac{1}{2}

loss(X)=\frac{1}{2}\frac{1}{n}\sum_{i=1}^{n}({\hat{y}}^i-y^i)^2

1.2 优化方法

所谓训练模型,就是不断优化模型里的参数,使得损失函数尽可能小。这里采用小批量随机梯度下降法(minibatch stochastic gradient desent),加载数据集需要很高的代价,若不采用小批量更新,每次更新参数需要加载整个数据集(遍历所有样本),非常耗时,因此在大规模数据集上,一般采用小批量随机梯度下降法,提高参数更新的次数而减少每次更新加载数据的数量。

具体做法是,选择小批量数据集B,大小为m,为了提高更新次数仍然需要遍历完整个数据集,设在一个epoch内遍历完,则在这一个epoch内,需要进行n/m次参数更新(设m能整除n),而每次更新只加载了m个样本。每次更新的具体公式如下:

w=w-lr\times \frac{1}{m}\sum_{i\in B}({\hat{y}}^i-y^i)x^i

b=b-lr\times \frac{1}{m}\sum_{i\in B}({\hat{y}}^i-y^i)

其中lr为学习率,和m是可调的超参数。

1.3 训练过程

简要说明训练的具体步骤:

  1. 获取数据集:分为训练集和测试集
  2. 建立模型:即对于样本输入,预测输出是什么。
  3. 初始化模型参数:对于w进行随机初始化(不能初始化为零),偏置b初始化为零。
  4. 确定损失函数:这里采用均方误差函数
  5. 确定优化方法:sgd算法
  6. 进行参数更新

2 线性二分类问题

对于线性可分问题(即可以用一个超平面将两类分开),主要任务确定这个超平面。在二维平面中,即确定一条直线,样本分布在直线的两侧。这样的分类器可以描述为,通过特征的线性组合做出分类决定(即属于哪一类)。

分类一般得到属于某一类别的概率,通过比较概率的大小判断它是属于哪一类。

2.1 分类模型

假设这条直线方程为\theta_1x_1+\theta_2x_2+\theta_0=0,令z=\theta_1x_1+\theta_2x_2+\theta_0,z的符号决定了样本点在直线的某侧,由点到直线距离公式可知,当z大于零时,z越大距离越远;z小于零时,z越小距离越远。为了分类越准确,样本点到直线的距离越远越好。因此该模型的特征是z的绝对值越大,越接近0或1。选择下面的Sigmoid函数作为输出:

\hat{y}=\frac{1}{1+e^{-z}}

假如某一样本点使得z大于零,则输出值大于0.5,若小于零,则输出值小于0.5。

2.2 损失函数

2.2.1 损失函数1——平方误差

真实值y^i只能取0,1。构造损失函数为

loss(X)=\frac{1}{2}\sum_{i=1}^{n}(y^i-{\hat y}^i)^2

假如某样本真实标签为1,该损失函数的优化会让则预测输出值越大(越接近1);若真实标签为0,则该损失函数的优化会让预测输出值越小(越接近0),达到了分类的目的。

2.2.2 损失函数2——对数损失

取损失函数为

loss(X)=-\underset{i}{\sum}[y^ilog{\hat y}^i+(1-y^i)log(1-{\hat y}^i)]

3 多分类问题

设每个样本的特征维数为d,类别数为q,希望输出q个概率,即属于各个类别的概率。

3.1 softmax回归

3.1.1 模型建立

softmax是一个简单的单层神经网络,即只有一层输出层。输入层个数为d,输出层个数为q。假设有n个样本的样本矩阵X,该神经网络的输出值为:

O=XW+b

其中X\in\mathbb{R}^{n\times d},W\in\mathbb{R}^{d\times q},b\in\mathbb{R}^q,O\in\mathbb{R}^{n\times q}。为了将输出映射为概率值,即0-1的值,需要引入softmax函数,即对于一个样本的q个输出,所有元素取exp后除以总和,则经过softmax后的输出为

\hat{y}=softmax(O)

其中\hat y\in\mathbb{R}^{n\times q},其某一行第i个元素为{\hat{y}}^i=\frac{exp(o_i)}{\sum_kexp(o_k)}

softmax函数会按行来求取概率,即对每一行(一个样本)求该行的概率分布。所得结果是一个n行q列的矩阵。

3.1.2 损失函数

对数极大似然:一个事件发生了,那么参数应当使得其发生的概率最大

对于上述模型的输出\hat{y},展开写成具体的矩阵形式:

\hat{y}= \begin{bmatrix} \hat{y}_{11} & \hat{y}_{12} & ...&\hat{y}_{1q}\\ \hat{y}_{21} & \hat{y}_{22} & ...&\hat{y}_{2q}\\ \vdots & \vdots & ...&\vdots \\ \hat{y}_{i1} & \hat{y}_{i2} & ...&\hat{y}_{iq}\\ \vdots & \vdots & ...&\vdots \\ \hat{y}_{n1} & \hat{y}_{n2} & ...&\hat{y}_{nq}\\ \end{bmatrix}

对于第i行即第i个样本来说,它的真实标签是y^i,用独热码来表示它的类别。而第i行{\hat y}^i的某一个值的含义可以认为是属于特定类的概率,那么我们可以知道在我们的计算结果中,它属于真实类别的概率P(y^i\mid x^i)=\hat{y}_{ik},k是y^i所代表类别的列。

那么在我们的计算结果中,所有样本的真实标签都发生的概率为上述概率之积:

\prod_{i=1}^{n}p(y^i\mid x^i,W,b)

由此,我们要让输出结果尽可能接近真实,就需要让上述概率越大越好,于是可以取损失函数为上式的负对数:

loss(X)=-\sum_{i=1}^{n}log(p(y^i\mid x^i,W,b))

其中依托于真实标签的独热码表示方式,我们可以将上述概率写为独热码和概率向量的内积表示:

loss(X)=-\sum_{i=1}^{n}y^ilog({\hat y}^i)

其中,y^i\in\mathbb{R}^q,{\hat y}^i\in\mathbb{R}^q。该损失函数又称为交叉熵损失函数

3.2 多层感知机

3.2.1 单神经元模型

(1) 模型:对输入作线性组合后进入激活函数(sigmoid函数、对称型阶跃函数等)输出。

(2) Hebb规则:连接权值的调整量与输入与输出乘积成正比:\Delta w=\alpha \cdot x \cdot y

3.2.2 感知机

感知机从输入到输出的模型如下:

y=f(x)=sign(W^TX)

对于一个样本(x^i,y^i),可以看到,当y^iW^Tx^i同号时,分类正确,异号时分类错误,因此可以得到训练步骤如下:

  1. 初始化W
  2. 选择样本点(x^i,y^i)
  3. 判断该样本点是否为分类错误点,即判断若y^i (w^Tx^i)\leqslant 0,则更新权值:w_{k+1}=w_{k}+\eta y^ix^i
  4. 转到2,直到训练集中没有误分类点

3.2.3 多层感知机

在输入层和输出层间加一层或多层隐单元,构成多层感知器(多层前馈神经网络),突破线性模型的限制。

(1) 模型数学表述

同上述一样,X\in\mathbb{R}^{n\times d}是含有n个变量的小批量,d为特征数。对于有h个隐藏单元的单隐藏层多层感知机,用H\in\mathbb{R}^{n\times h}表示隐藏层的输出.因为隐藏层和输出层都是全连接层,因此有隐藏层权重W^1\in\mathbb{R}^{d\times h}、隐藏层偏置b^1\in\mathbb{R}^{1\times h}、输出层权重W^2\in\mathbb{R}^{h\times q}和输出层偏置b^2\in\mathbb{R}^{1\times q}。为了发挥多层架构的潜力,在仿射变换后对每个单元应用非线性激活函数\sigma

(2) 三层阈值网络

隐藏层和输出层的激活函数选择如下函数:

\sigma(\cdot)= \left\{\begin{matrix} 1, & \cdot\geqslant 0 \\ 0,& \cdot< 0 \end{matrix}\right.

定理1:若隐层节点(单元)可任意设置,用三层阈值节点的网络可以实现任意的二值逻辑函数。

(3) 常用激活函数

  • ReLU函数:0和输入取大值
  • sigmoid函数:压缩到区间0~1之间
  • tanh函数:压缩到区间-1~1之间

定理2:若隐藏节点(单元)可任意设置,用三层S型非线性特性节点的网络,可以一致逼近紧集上的连续函数或按范数逼近紧集上的平方可积函数。

4 模型训练相关问题

模型选择:使用验证集进行模型选择,在训练数据稀缺时,采用K折交叉验证。将原始训练数据分为K个不重叠的子集,然后执行K次模型训练和验证,每次在K-1个子集上进行训练,并在剩余一个子集上进行验证,最后通过K次实验结果的平均值来估计训练误差和验证误差

欠拟合:误差一直比较大

过拟合:在训练集上误差小,在测试集上误差大

训练误差:模型在训练集上计算得到的误差

泛化误差:模型应用在同样从原始样本的分布中抽取的无限多数据样本时,模型误差的期望

正则化技术:对抗过拟合的技术。

  • 权重衰减(L2正则化):让权重向量较小,将权重的范数作为惩罚项添加到损失函数中:loss(w)+\frac{\lambda}{2}\left \| w \right \|^2
  • 暂退法(Dropout):在整个训练过程的每一次迭代中,标准暂退法包括在计算下一层之前将当前层中的一些节点置零

动量法参数更新

解决问题:梯度变化剧烈。

具体实现:使用平滑过的梯度对权重进行更新,当前计算出来的梯度是g_t,则梯度平滑为

v_t=\beta v_{t-1}+g_t=g_t+\beta g_{t-1}+\beta^2 g_{t-2}+\beta^3 g_{t-3}+...

w_t=w_{t-1}-\eta v_t

其中\beta常见取值为0.5、0.9、0.95、0.99等,取值越大和越多的过去项有关。

Adam算法:非常平滑的梯度算法,对学习率不敏感。 

  • 16
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值