神经网络基础
1. 机器学习基本概念
1.1 机器学习分类
根据训练数据是否带有标签,可以分为:
-
监督学习
指的是训练数据中每个样本都有标签,通过标签可以指导模型进行学习,学到具有判别性的特征,从而对未知样本进行预测。 -
无监督学习
指的是训练数据完全没有标签,通过算法从数据中发现一些数据之间的约束关系,比如数据之间的关联、距离关系等。 -
半监督学习
指的是介于监督学习与无监督学习之间的一种学习方式。它的训练数据既包含有标签数据,也包含无标签数据。
假设标签数据和无标签数据都是从同一个分布采样而来的,那无标签数据中含有一些数据分布相关的信息,可以作为标签数据之外的补充。这种情况在现实中是非常常见的。
比如在互联网行业,每天会产生大量的数据,这些数据部分可能携带标签,但更多的数据是不带标签的,如果靠工人标记这些无标签数据,代价巨大,而半监督学习可以提供一些解决思路。
从算法输出的形式上来分,可以分为分类问题和回归问题,这两类问题都属于监督学习的范畴:
-
分类问题
指的是模型的输出值为离散值。 -
回归问题
指的是模型的输出值为连续值。比如在电商广告推荐中,模型常常输出用户点击某个商品的概率,概率越高表示模型认为用户越倾向于点击该商品。
1.2 机器学习流程概述
提取特征–>建立模型–>确定损失函数和进行优化求解
1.3 常见的损失函数
-
平方损失函数
其中,N是样本数量,它衡量的是模型预测的结果与标签之间的平方差,常用于回归问题。 -
交叉熵损失
交叉熵(cross entropy)损失常用于分类问题中,分类模型通常输出类别的概率分布,交叉熵衡量的是数据标签的真实分布与分类模型预测的概率分部之间的差异,损失值越小,他们之间的差异就越小。模型就能越准确地进行预测。
1.4 梯度下降算法
机器学习中很多问题本质上都是求解优化相关的问题,找到合适的参数以期最小化损失函数值。
梯度下降算法利用梯度信息,通过不断迭代调整参数来寻找合适的解。
有关梯度下降,网上已经有很多成熟的技术贴,在此不在多余赘述。
2. 神经网络
2.1 神经元
一个基本的神经元包括3个基本组成部分:输入信号、线性组合和非线性激活函数。我们可以用下列式子来描述神经元。
其中,x0,x1,····,xm是输入信号,wi0,wi1···,wim是神经元的权值,zi是输入信号的线性组合,b是偏置,激活函数为σ(·),ai是神经元输出信号。
2.2 多层感知器
有关多层感知器,网上已经有很多成熟的技术贴,在此不在多余赘述。
2.3 激活函数
激活函数是神经网络中一个十分重要的概念,它的非线性使得神经网络几乎可以任意逼近任何非线性函数。如果不使用激活函数,无论神经网络有多少层,其每一层的输出都是上一层输入的线性组合,这样构成的神经网络仍然是一个线性模型,表达能力有限。
激活函数的选择多种多样,一个基本的要求是他们是连续可导的,可以允许在少数点上不可导。
常用的激活函数包括S型激活函数和ReLU及其变种等。
-
S型激活函数
S型激活函数中比较经典的是Sigmoid和Tanh,这种激活函数的特点是有界(即有最大最小值),且输入的绝对值越大,对应的梯度就越小,越趋近于0。
Sigmoid函数的定义式为:
Sigmoid函数将任意大小的输入都压缩到0到1之间,输入的值越大,压缩越接近于1;输入的值越小,压缩越接近于0。
它在神经网络中常常用作二分类器最后一层的激活函数,可以将任意实数值转化为概率。
另一个函数是Tanh,其定义式为:
相较于Sigmoid,Tanh的值域范围更大一些,为(-1,1)。 -
ReLU及其变种
在这里主要介绍一下ReLU。
ReLU即线性整流函数(Rectified Linear Unit),是目前深度学习模型中经常使用的激活函数。
它的定义为:
可以看出,ReLU对正负值的处理完全不同,当输入为负时,全部置0;而当输入为正数时则保持不变。这个特性被称作单侧抑制。
由于它在输入为正时,输出保持不变,梯度为1,可以缓解梯度消失的问题,计算简单,计算效率会很高。
2.4 训练神经网络
神经网络的运行过程分为三步:前向传播,反向传播,参数更新。通过不断的迭代进行模型参数的更新,以从数据中挖掘出有价值的信息。
-
前向传播
给定输入和参数,逐层向前进行计算,最后输出预测结果。 -
反向传播
基于前向传播得到的预测结果,使用损失函数得到损失值,然后计算相关参数的梯度,该计算方法称为反向传播。 -
参数更新
使用梯度下降算法对参数进行更新,重复上述过程,逐步迭代,直到模型收敛。
2.5 优化困境
-
梯度消失
根据反向传播公式,第l层的误差是通过第(l+1)层的误差与两层之间权重的加权,再乘以激活函数的导数得到的,如果激活函数使用Sigmoid,其导数的最大值为0.25,当层数增加时,最后一层的误差将在前面的层中快速衰减,这会导致靠近输入层的梯度值非常小,参数几乎无法进行有效的更新。在下一次前向传播时,由于前面层的参数无法有效地从数据中获得有价值的信息供后面的层使用,模型就难以进行有效的训练,这种现象称为梯度消失。
导致梯度消失的原因在于激活函数的饱和性,比如Sigmoid、Tanh等都会带来这种问题。因此现在的神经网络通常使用ReLU激活函数。 -
局部最优与鞍点
字面意思理解即可。