算法基础二:神经网络&深度学习进阶1

一、理念杂谈:

1、两大主题:
1)神经网络:一种受生物学启发的编程范式,能够让计算机从可观测数据中学习,模仿人类学习的过程;

2)深度学习:用于神经网络学习的一套强大的技术;

2、新的编程范式:神经网络是不同于以往的编程范式。传统的编程方法告诉计算机做什么,把大问题分解成许多小问题,明确任务,明确每一步,才能让计算机执行;神经网络不直接告诉计算机如何解决问题,而是让它从可观测的数据中学习,让它自己找出解决问题的方法。

3、三代神经网络的发展

1)感知机

上世纪五六十年代、拥有输入层、输出层和一个隐含层,主要是线性结构,只能实现简单的逻辑运算(与非门)

a)感知机:输入输出都是0,1

b)sigmoid神经元:输入输出都是0到1的任意值,通过sigmoid函数得到一个平滑的感知机,把输出的值映射到0-1之间。

sigmoid神经元相比于感知机可以改善:网络中的权重或者偏置做微小的改动,只会引起输出的微小的变化,这对于让拥有sigmoid神经元的神经网络正常学习至关重要。

2)多层感知机(NN)

上世纪八十年代,使用sigmoid或tanh等连续函数模拟神经元对激励的响应,在训练算法上则使用Werbos发明的反向传播BP算法。

可以输入一些非线性的结构,解决了之前无法模拟异或逻辑的缺陷。

算法基础二:神经网络&深度学习进阶1_第1张图片

3)深度神经网络 

随着网络层数的增加,优化函数更容易陷入局部最优解,同时“梯度消失”现象逐渐加重。

为了克服梯度消失,ReLU、maxout等传输函数代替了sigmoid,形成了如今DNN的基本形式。单从结构上来说,全连接的DNN和图1的多层感知机是没有任何区别的

深度神经网络三大算法:DNN,RNN,CNN

4、常用的神经网络学习算法

1)梯度下降算法(一种思想):模型最大化或者最小化的函数称为目标函数或者准则,当我们对其进行最小化时,我们称之为代价函数/损失函数/误差函数。

梯度下降算法就是求解损失函数的一阶导数,以便找到下降的最快的方向。

2)随机梯度下降算法:能够加速学习,思想就是通过随机选取少量的训练输入样本来计算梯度下降的方向。

一般的深度学习也都是分批训练的,随机选取一批量数据去训练,用完所有的训练输入就完成了一个轮epoch,接着就可以进行下一轮训练了。

6、常见的损失函数

1)平方损失函数(类似于最小二乘法,比较好理解)

2)交叉熵损失函数&最大似然函数:

PS:当使用sigmoid作为激活函数时,常使用交叉熵损失函数而不是均方误差损失函数,因为她可以解决平方损失函数权重更新过慢的问题,具有“误差大的时候,权重更新更快;误差小时,权重更新更慢”的特性。

补充.交叉熵函数最大似然函数的联系和区别?

区别:交叉熵函数使用来描述模型预测值和真实值的差距大小,越大代表越不相近;似然函数的本质就是衡量在某个参数下,整体的估计和真实的情况一样的概率,越大代表越相近。

联系:交叉熵函数可以由最大似然函数在伯努利分布的条件下推导出来,或者说最小化交叉熵函数的本质就是对数似然函数的最大化

7、反向传播算法

前向传递输入信号直至输出产生误差,反向传播误差信息更新权重矩阵,这样权重得以在信息双向流动中得到优化。

一些概念:

超参数:在开始学习之前设置的参数,而不是通过训练得到的参数数据(比如感知机的权重和偏置)。

8、正则化技术-防止过拟合

1)L2正则

 

在原有损失函数的基础上加上L2正则:权重的平方和一个因子

L2正则惩罚大的权重,倾向于让神经网络优先选择较小的权重,使得模型更加简单。

2)L1正则

在原有损失函数的基础上加上L1正则:权重的绝对值和一个因子

L1正则倾向于将神经网络的权重聚集在相对少量的重要连接上,而其他权重会趋近于0,因而更适合稀疏数据。

3)Dropout

随机丢弃不同的神经元集合,有点像训练不同的神经网络,因此随机丢弃过程把不同的神经网络的效果平均了。

4) 增大训练集

9、梯度消失与梯度爆炸

1)梯度消失

现象:前面几层的权重几乎不变,仍然接近初始值,这时深层神经网络就等价于只有后几层的潜层神经网络了。使用sigmoid时,更容易出现梯度消失现象。

原因:深度神经网络+反向传播机制:网络太深,网络权重更新不稳定,就容易出现梯度消失现象

措施:

a:用ReLU、LeakyRelu、Elu等激活函数代替sigmoid激活函数

【原因】

sigmoid函数收敛缓慢,计算量大;

反向传播是,很容易出现梯度消失的情况;

b:batch normorlization

c:残差网络(ResNet)

参考:

神经网络训练中的梯度消失与梯度爆炸 - 知乎

梯度消失、梯度爆炸及其解决方法_u011734144的专栏-CSDN博客_梯度爆炸

2)梯度爆炸

现象和原因:前面层的神经网络的权重很大,后面的层指数级增加大,最后计算出的梯度就会很大,如果以这个梯度值进行更新,那么这次迭代的步长就很大,一下子超出合理的区域。

措施:

a:梯度裁剪:更新梯度时,如果梯度超过一个阈值,就将其限制在一定范围内;

b:正则

10、常见的深度神经网络算法

1)DNN:dnn相比于nn(神经网络)相比最大的不同就是层数增多了(多了一些隐藏层),并解决了模型可训练的问题。

弊端:只能看到预先设定长度的数据,对于语音和语言等前后相关的时序信号表达能力不强,因此出现了RNN。算法基础二:神经网络&深度学习进阶1_第2张图片

2)RNN:在普通的全连接网络中,DNN的隐层只能够接受到当前时刻上一层的输入,而在RNN中,神经元的输出可以在下一时间段直接作用到本身。换句话说,就是递归神经网络它的隐层不但可以接收到上一层的输入,也可以得到上一时刻当前隐层的输入。

算法基础二:神经网络&深度学习进阶1_第3张图片

这一个变化的重要意义就在于使得神经网络具备了历史记忆的功能,原则上它可以看到无穷长的历史信息,这非常适合于像语音语言这种具有长时相关性的任务。

3)CNN:卷积神经网络主要是模拟人的视觉神经系统提出来的。卷积神经网络的结构依旧包括输入层、卷积层、池化层和输出层(全连接层+softmax层)。

输入层到隐含层的参数瞬间降低到了卷积核的大小*卷积核的个数。

通过卷积核池化,使得CNN模型限制参数了个数并挖掘了局部结构的这个特点

提出:全连接DNN的结构里下层神经元和所有上层神经元都能够形成连接,带来的潜在问题是参数数量的膨胀。

相比于DNN:

1)CNN的卷积层用来提取特征——压缩提纯的作用;

2)CNN卷积层级之间的神经元是局部连接权值共享的,这样就大大减少了参数量(w,b)。

所以CNN一般比DNN要快,更小的参数量。

算法基础二:神经网络&深度学习进阶1_第4张图片

参考:

CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的内部网络结构有什么区别? - 知乎

https://www.bilibili.com/video/BV1j7411f7Ru?from=search&seid=15592079467654574231&spm_id_from=333.337.0.0

11、ResNet(残差网络)

 参考:深度残差网络——ResNet学习笔记 - 我的明天不是梦 - 博客园

12、激活函数

1)为啥要使用激活函数

 a. 不使用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合。

 b. 使用激活函数,能够给神经元引入非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以利用到更多的非线性模型中。

2)激活函数要满足的性质

1. 连续并可导(允许少数点上不可导)的非线性函数。可导的激活函数可以直接利用数值优化的方法来学习网络参                    数。
2. 激活函数及其导函数要尽可能的简单,有利于提高网络计算效率。
3. 激活函数的导函数的值域要在一个合适的区间内,不能太大也不能太小,否则会影响训练的效率和稳定性。 

3)常见的激活函数

a.sigmoid

算法基础二:神经网络&深度学习进阶1_第5张图片

算法基础二:神经网络&深度学习进阶1_第6张图片

这个函数在伯努利分布上非常好用, 

可以看到在趋于正无穷或负无穷时,函数趋近平滑状态,sigmoid函数因为输出范围(0,1),所以二分类的概率常常用这个函数,事实上logisti回归采用这个函数很多教程也说了以下几个优点

    1  值域在0和1之间

    2   函数具有非常好的对称性

    函数对输入超过一定范围就会不敏感

sigmoid的输出在0和1之间,我们在二分类任务中,采用sigmoid的输出的是事件概率,也就是当输出满足满足某一概率条件我们将其划分正类;

另外LSTM的遗忘门也是用了sigmoid函数,1为记忆,0位遗忘;

b.tanh

 算法基础二:神经网络&深度学习进阶1_第7张图片

算法基础二:神经网络&深度学习进阶1_第8张图片

 sigmoid和tanh激活函数有共同的缺点:即在z很大或很小时,梯度几乎为零,因此使用梯度下降优化算法更新网络很慢。

c.relu

算法基础二:神经网络&深度学习进阶1_第9张图片可以解决梯度消失的问题!

你可能感兴趣的:(深度学习基础,神经网络,深度学习,机器学习,dnn,rnn)