机器学习之四——神经网络

一、神经元模型

1. 神经元的工作原理

网络中的基本单元为神经元,每个神经元收到n个来自其他神经元的输入信号,这些输入信号通过带权重的连接进行传递。
每个神经元收到的总的输入值与神经元的阈值相比较,若高于阈值,则该神经元被激活并通过激活函数产生神经元的输出。
(为什么要用激活函数:使得神经网络由简单的线性变换延伸到非线性变换,可获得更强大的表示能力;同时将输入值映射后更利于反向传播时计算梯度)
将多个这样的神经元按一定的层次结构连接起来,即得到神经网络。

2. 激活函数的选择

1) 阶跃函数

s g n ( x ) = { 1 , x 0 0 , x < 0

阶跃函数为理想的激活函数,然而,阶跃函数既不光滑亦不连续,需要寻找数学性质更好的激活函数做替代。
2) sigmoid函数
s i g m o i d ( x ) = 1 1 + e x

sigmoid函数的特点:
a. 输出介于(0, 1)之间,便于处理概率相关的问题。
b. 易导致梯度饱和/梯度弥散。若输入稍远离坐标原点,梯度就会变得很小,趋近于零。由于反向传播过程中,权重需通过微分的链式法则进行更新,使用sigmoid函数会导致权重对损失函数几乎无影响,不利于权重的优化。
c. 函数的输出不是以0为中心,使得权重的更新效率降低
d. 需进行指数运算,速度慢
3)tanh函数
t a n h ( x ) = s i n h ( x ) c o s h ( x ) = e x e x e x + e x

tanh函数的特点:
a. 输出介于(-1, 1)之间,以零为中心
b. 输入较大/较小时,梯度较小,不利于权重的优化
4)ReLU函数
f ( x ) = m a x ( 0 , x )

ReLU函数特点:
a. 输入为正时,不存在梯度饱和问题
b. 只有线性关系,计算速度快
c. 输入为负时,完全不被激活,反向传播过程中使得梯度为0,不利于权重优化
d. 不以0为输出中心

二、感知机与多层网络

感知机为两层神经元模型,可进行的运算:与、或、非(线性可分问题)
若要解决非线性可分问题,需使用多层神经元

三、误差逆传播算法(BP)

1.BP算法的过程

0)随机初始化所有权重(阈值可看作哑变量对应的权重,这样可将权重和阈值的学习统一为权重的学习)
1)根据当前参数计算当前样本的输出
2)计算输出层神经元的梯度
3)计算隐层神经元的梯度
4)更新权重
重复1)~4)至达到停止条件

2.缓解BP网络过拟合的方法

1)早停(early stopping)
将数据分为训练集和验证集,训练集用来计算梯度、更新权重,验证集用来计算误差。若训练集误差降低而验证集误差升高时,即终止训练过程。
2)正则化
在目标函数中加入正则项,限制模型复杂度。正则项系数 λ 由交叉验证得到。

四、全局最小与局部极小

参数寻优方法:梯度下降法——沿着负梯度方向搜索最优解,梯度为0时,达到局部极小
若误差函数只有一个局部极小点,则该点为全局最小点;若误差函数有多个局部极小点,则可采取的方法:
1)采用多组不同的参数值初始化神经网络
2)模拟退火
3)随机梯度下降

五、深度学习

如何对深度神经网络进行有效的训练?
1)无监督逐层训练
每次训练一层隐节点,训练时将上一层的隐节点作为输入,本层节点的输出作为下一层节点的输入,即为”预训练“。预训练完成后,再对整个网络微调。
2)权共享
CNN:
卷积层:通过卷积滤波器提取输入的一种特征
池化层:基于局部相关性原理进行下采样,使得在减少数据量的同时保留有用信息
训练时用在卷积层和池化层相同的连接权,大幅减少了需训练的参数数目。
参考链接:激活函数https://www.cnblogs.com/rgvb178/p/6055213.html

猜你喜欢

转载自blog.csdn.net/qq_24153697/article/details/80003309