Unit2 神经网络基础
2.1 机器学习基本概念
机器学习的分类
根据训练数据是否有标签,机器学习可以分为监督学习、半监督学习和无监督学习。
- 监督学习:训练数据中每个样本都有标签,通过标签可以指导模型进行训练,学到具有判别性的特征,从而能够对未知样本进行预测
- 无监督学习:训练数据完全没有标签,通过算法从数据中发现一些数据之间的约束关系,比如数据之间的关联、距离关系等。典型的无监督算法如聚类,根据一定的度量指标,将“距离”相近的样本聚集在一起。
- 半监督学习:训练数据既包含有标签数据,也包含无标签数据
从算法输出的形式上来分,可以分为分类问题和回归问题,这两类问题都属于监督学习的范畴。
- 分类问题:指的是模型的输出值为离散值。比如在图像分类任务中,模型输出为图像所属的具体类别。
- 回归问题:指的是模型的输出值为连续值。比如在电商广告推荐中,模型常常输出用户点击某个商品的概率,概率越高表示模型认为用户越倾向于点击该商品。
机器学习流程:提取特征→建立模型→确定损失函数和进行优化求解
常见的损失函数
- 平方损失函数:衡量的是模型预测的结果与标签之间的平方差,常用于回归类问题。
- 交叉熵损失(cross entropy):常用于分类问题中,分类模型通常输出类别的概率分布,交叉熵衡量的是数据标签的真实分布与分类模型预测的概率分布之间的差异程度,损失值越小,它们之间的差异就越小,模型就越能准确地进行预测。
梯度下降算法
梯度下降算法原理:机器学习中很多问题的求解本质上都是求解优化相关的问题,找到合适的参数以期最小化损失函数值。求解类似的优化问题,有很多成熟的方法可以参考,梯度下降就是一种经典的方法。它利用梯度信息,通过不断迭代调整参数来寻找合适的解。算法过程:首先,通过随机初始化为需要求解的参数赋初值,作为优化的起点;接下来,使用模型对所有样本进行预测,计算总体的损失值;然后利用损失值对模型参数进行求导,得到相应的梯度;最后基于梯度调整参数,得到迭代之后的参数。重复上述过程,直到达到停止条件。
随机梯度下降算法:
批梯度下降(Batch Gradient Descent):使用所有样本参与损失值的计算,费时费力
随机梯度下降(Stochastic Gradient Descent,SGD):不使用全量的样本来计算梯度,而使用单一样本来近似估计梯度,即每次从训练集中随机选择一个样本,计算其对应的损失和梯度,进行参数更新,反复迭代
小批量随机梯度下降(mini-batch SGD):SGD的改进版本。每次使用多个样本来估计梯度,这样可以减小不确定性,提高收敛速率。其中每次迭代选取的样本数量称为批大小(batch size)。
2.2 神经网络
神经元:包含3个基本组成部分:输入信号、线性组合和非线性激活函数
2.2 神经元的计算多层感知器(Multi-Layer Perceptron,MLP)
2.3多层感知器模型
2.3 激活函数
常用的激活函数包括S型激活函数和ReLU及其变种等。
S型激活函数
S型激活函数中比较典型的是Sigmoid和Tanh,这种激活函数的特点是有界。
Sigmoid函数:将任意大小的输入都压缩到0到1之间,输入的值越大,压缩后越趋近于1;输入值越小,压缩后越趋近于0。当x∈[–1,1]时,可以近似看作线性函数,并且当x=0时,函数值为0.5。它在神经网络中常常用作二分类器最后一层的激活函数,可将任意实数值转换为概率;另一个应用场景是由于它的值域为(0,1),故可以作为一个类似于开关的调节器,用于对其他信息进行调节。
Tanh函数:相比较于Sigmoid,Tanh的值域范围更大一些,为(–1,1)。
2.5 Tanh函数
2.6 Sigmoid&Tanh
RELU及其变种
RELU(线性整流函数,Rectified Linear Unit):是目前深度学习模型中经常使用的激活函数。它的定义为当x≥0时,保持x不变进行输出,保持不变;当x<0时,输出为0。
2.8 RELU及其变种
2.4 训练神经网络
神经网络的运行过程
- 前向传播:给定输入和参数,逐层向前进行计算,最后输出预测结果
- 反向传播:基于前向传播得到的预测结果,使用损失函数得到损失值,然后计算相关参数的梯度,该计算方法称为反向传播(back-propagation)
-
参数更新:使用梯度下降算法对参数进行更新,重复上述过程,逐步迭代,直到模型收敛。
2.9 神经网络的运行过程
优化困境
梯度消失:第l层的误差是通过第(l+1)层的误差与两层之间权重的加权,再乘以激活函数的导数得到的,如果激活函数使用Sigmoid,它的导数为σ'(x)=σ(x)(1–σ(x)),由于σ(x)∈(0,1),它的导数的最大值为σ'(x)=0.25,当层数增加时,最后一层的误差将在前面的层中快速衰减,这会导致靠近输入层的梯度值非常小,参数几乎无法进行有效的更新,在下一次前向传播时,由于前面层的参数无法有效地从数据中获得有价值的信息供后面的层使用,模型就难以进行有效的训练。这种现象称为梯度消失。
导致梯度消失的原因在于激活函数的饱和性,比如Sigmoid、Tanh等都会带来这种问题,它们在函数值趋近于上下边界时,梯度通常比较小,再与误差项相乘将变得更小,多次的反向传播将会使得梯度值不断减小。因此现在的神经网络通常使用ReLU激活函数。
网友评论