<深度学习入门与TensorFlow实践> - 笔记 III

举报
黄生 发表于 2023/01/29 15:25:20 2023/01/29
【摘要】 前面说了logistic模型的决策边界是线性的,所以无法很好的完成决策边界是非线性的分类任务。直观上看,一条线不行,用二条线就可以更好的完成这个分类任务,如下:所以,首先建立两个logistic模型,这两个logistic模型的决策边界为图上所示的两条直线。然后以这两个logistic模型的结果作为输入,建立一个logistic回归模型,这个模型用于判断观测点在两条直线中所处的位置。可以写代...

前面说了logistic模型的决策边界是线性的,所以无法很好的完成决策边界是非线性的分类任务。
直观上看,一条线不行,用二条线就可以更好的完成这个分类任务,如下:
image.png

所以,
首先建立两个logistic模型,这两个logistic模型的决策边界为图上所示的两条直线。
然后以这两个logistic模型的结果作为输入,建立一个logistic回归模型,这个模型用于判断观测点在两条直线中所处的位置。

image.png

可以写代码实现上图所示的神经网络,代码忽略之。而代码运行的结果是预测全部正确。
这里展示第2组数据的各层的结果:
image.png

对照着看从输入层到隐藏层的两个logistic模型对应的决策边界:

image.png

可以看到,隐藏层把(0,0),(1,1)大致预测到(0,1),这2个点在2条决策边界线之内;把(0,1), (1,0)分别大致预测为(0,0), (1,1),这2个点在2条决策边界线之外。
因此,在此基础上,隐藏层到输出层的logistic模型就可以把其分开了:

image.png

从这个例子可以看到,神经网络可以先通过隐藏层学习数据的不同特征,再根据隐藏层得到的特征做出更好的预测。也就是说通过增加隐藏层,神经网络可以找到输入层和因变量之间更复杂的关系;而不通过隐藏层,这种关系无法表达。

同时可以通过增加隐藏层的数量和每个隐藏层的节点数,来处理更加复杂的问题。拥有多个隐藏层的神经网络就可以实现深度学习。而数量越多,就需要更多的技巧来训练并发挥这些隐藏层的作用。


正向传播(Forward Propagation FP)算法指输入值通过神经网络得到输出值的方法。

image.png

正向传播算法的计算图如下:

image.png

σ \sigma 表示sigmoid函数,也就是激活函数。

包含损失函数的计算图如下:

image.png

得到 l 2 l_2 ,通过 l l 计算损失函数L,其中 l l 表示求解损失函数的运算。


反向传播算法(BP Backward Propagation)是神经网络中逐层计算参数梯度的方法。

image.png

我早就已经开始看不懂了,这个图还没完。

这个正向传播算法和反向传播算法干啥用的呢?我的理解是用来训练神经网络模型的。因为中间加了很多隐藏层,隐藏层也是需要将损失最小化的呀,所以需要引入这两个算法。

神经网络的目的是建立输入层与输出层之间的关系,进而利用建立的关系得到预测值。通过增加隐藏层,神经网络可以找到输入层与输出层之间较复杂的关系。深度学习是拥有多个隐藏层的神经网络,在神经网络中,我们通过正向传播算法得到预测值,并通过反向传播算法得到参数梯度,然后利用梯度下降法更新参数,使得模型误差变小,最终得到一个训练好的神经网络模型。

在神经网络中,只要知道神经网络的结构,就可以自动的计算参数梯度,进而训练神经网络。因此,无论神经网络模型的结构有多复杂,我们都可以使用一套既定的算法训练神经网络模型。


如果没有激活函数,神经网络会变成什么呢?
答案是如果没有激活函数,那么无论神经网络的结构有多复杂,它都将退化为一个线性模型。

现实的回归问题或者分类问题的决策边界通常都是复杂且非线性的。这要求模型具有产生复杂的非线性决策边界的能力,在这一点上激活函数在神经网络中扮演了非常重要的角色,通常我们让隐藏层的每一个节点值都通过激活函数进行变换,使得输出层是输入层的一个非线性函数。

当神经网络有很多隐藏层,且每个隐藏层有很多节点是加入了激活函数的神经网络,可以得到非常复杂的非线性函数,从而提高神经网络解决实际问题的能力。

那么什么样的激活函数会是一个表现的比较好的激活函数呢?

  1. 激活函数是连续函数,且定义域是负无穷大到正无穷大。

  2. 激活函数是单调函数。

  3. 激活函数是非线性函数,否则就没有意义,还是会蜕变为线性模型。

  4. 激活函数是可导函数,且激活函数和它的导数都容易计算。

image.png

image.png


因变量的常见数据类型有三种:定量数据、二分类定性数据和多分类定性数据。输出层激活函数的选择主要取决于因变量的数据类型。

MNIST数据集是机器学习文献中常用的数据。因变量(0~9)用独热码表示,比如数字8的独热码为(0 0 0 0 0 0 0 0 1 0)数字2的读热码为(0 0 1 0 0 0 0 0 0 0)

image.png

输出层激活函数的选择取决于因变量的数据类型。选定激活函数之后,需要根据建模目标选择相应的损失函数。

image.png


四个常用且效果很好的隐藏层激活函数:

  1. sigmoid
  2. tanh
  3. ReLU
  4. Leaky ReLU

image.png

sigmoid函数的导数都是较小的小数,这可能使得参数的梯度非常小,导致神经网络模型无法通过梯度下降法更新参数。这就是sigmoid函数的梯度消失问题。

tanh函数也有梯度消失问题。

image.png

ReLU(Rectified Linear Unit)函数出现和流行的时间都比较晚,但却是深度学习常用的激活函数。它非常简单:
ReLU(x)=max(x,0)
是一个折线函数,所有负的输入值都变换成0,所有非负的输入值,函数值都等于输入值本身。

image.png

ReLU函数在正值区域没有梯度消失的问题。

image.png

最后,总结如下:

image.png


神经网络模型建立好了之后,必然要进行模型的评估来了解神经网络的表现。
神经网络的因变量通常有两种数据类型,定量数据和定性数据。不同因变量数据类型对应的模型误差的定义也不一样。

当因变量为定性数据时,模型误差可以进一步分为两个类型:
假阳性率, FPR False Positive Rate

假阴性率。 FNR False Negative Rate
这两种错误对决策的影响可能是不一样的。以信用卡用户违约为例。

如果银行希望尽量降低风险,那么银行便希望真实违约,但被(错误)预测为不违约的人尽可能的少。(假阴)
如果银行希望扩大业务而适当放宽风险控制,那么银行可以让真实违约,但被(错误)预测为不违约的稍微多些。

image.png

从上表可以看出该模型可以很好的控制假阳性率,
也就是说, 在真实不违约的人中,绝大部分都正确预测为不违约;只有2人错误预测为违约。
但是假阴性率很大。


在实际中训练误差常常偏小, 不是模型真实误差的好的估计值。这是因为如果考试题目是我们做过的作业题,那么我们更容易得高分。

所以我们要有一些测试数据是不要参加模型训练的,需要搁置在一旁,直到模型完全建立好,再用来计算模型的测试误差。

模型的预测效果较差,经常是由于两类问题导致的。那就是
欠拟合,underfitting

过拟合 overfitting

欠拟合就是学生根本没有学好,根本没有理解知识点。考试的时候就是不会,当然考不好。
过拟合就是学生很刻苦,但是只掌握细节,完全没有一点抽象归纳的能力。所以考试题目稍微有一点变化就不会做。

image.png


解决欠拟合问题的方法比较简单,增加模型复杂度就可以了。常见的方法是增加隐藏层的数量或者增加隐藏层的节点数,或者二者同时增加。

如果训练误差持续下降,接近于0。而测试误差在下降后变得平稳,甚至略有上升。训练误差和测试误差的差距较大。这就是典型的过拟合情况。

在建立神经网络模型的初始阶段,在实践中,通常先构建一个复杂的神经网络模型。这个模型通常会拟合,然后应用一些方法控制复杂神经网络模型过拟合现象。这些方法称为正则化方法。regularization。

以上面的典型的过拟合的情况为例,一个很自然的想法就是早点停止训练神经网络,就可以防止神经网络模型过拟合。这种策略称为早停法。early stopping.

然而在现实中验证误差有可能不是单调减少的,就是带波的。所以早停法虽然防止了过拟合,但是有可能没能得到更好的神经网络模型。(比如下图中,得到了B,但是C更好)

image.png


L2惩罚法也是一个经典的正则化方法。
它是在原有损失函数的基础上,在构造一个新的损失函数。(带有惩罚项 是一个超参数)

模型集成(model ensemble)可以提供模型的预测准确度,思想就是,
先训练大量结构不同的模型,通过平均、或投票方式综合所有模型的结构,得到最终预测。

在实际中,有较大限制,原因很简单,
集成模型需要大量的神经网络模型,一个神经网络模型已经很费资源了…
不够快,很多场景是要实时有预测结果的,比如自动驾驶,等不了

于是2014年有人发明了丢弃法 dropout
很有创意,实现原理也简单,被广泛应用。
就是随机使某些节点失活。

image.png

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。