SoftMax的缺陷
1. SoftMax层网络实现的及问题:
SoftMax层新网络实现有时候会效果不佳, 以计算为例,给出两种计算方式:选项一是直接令
;选项二是计算
减去
再减去
,化简后该式也等于
。希望先分别计算这两个式子再求差。
而在实际计算中,由于计算机存储数字(浮点数)的内存有限,不同计算方式会产生不同程度的舍入误差。
2. 逻辑回归中的损失函数计算优化:
- 逻辑回归中,计算给定例子的损失函数时,先计算输出激活(如
),再用相应表达式计算损失(二元交叉熵损失)。
- 常规计算方式存在舍入误差问题,而如果不将作为中间项计算,直接将损失指定为展开
后的表达式(让
流处理),
流可以重新排列表达式中的项,提出更精确的数值计算方法。
- 原始实现会显式计算作为中间量,改进后的方法将底部表达式直接指定为损失函数,在计算机使用方式和是否显式计算
方面提供了更大灵活性。
- 改进方法的代码实现是让输出层仅使用线性激活函数,将激活函数(如负)和交叉熵损失都纳入损失函数的描述中。这种方式虽然代码清晰度降低,但减少了数字舍入误差。
3. SoftMax回归的改进:
SoftMax回归中,回忆激活值计算方式,损失取决于实际值
,如
时损失为
。原本分两步计算的代码存在问题。
- 若直接指定损失(如\或
时对应的负对数公式),有机会以更直接准确的方式重新排列项进行计算。
- 当疾病相关数值非常小或非常大时,通过重新排列项,流可以避免一些极端数字,从而得出更精确的损失函数计算结果。
- 改进的代码在层中,使用线性激活函数,从
到
的运算层,整个损失计算在损失函数中捕获,改进后的版本在数值上更精确,但代码可读性稍差。
4. 网络输出的变化及逻辑回归的补充说明:
- 新网络最后一层使用线性激活函数,不再输出1到10的概率,而是输出到
。
- 在逻辑回归情况下,若将输出逻辑函数和损失函数结合,也需改变代码,取开放值并通过逻辑函数获取概率。
多标签分类
1. 概念:
之前提到的都是多类型分类,即标签可以是两个或两个以上类别中的任意一个。另外还有一种不同类型的问题——多标签分类问题,其特点是每个图像可能有多个标签。
2. 例子:
以自动驾驶汽车或驾驶辅助系统为例,对于车前面的图片,会询问是否有车、公共汽车、行人等问题。 如一张图片中可能有一辆汽车,没有公共汽车,但至少有一个行人;另一张图片可能没有汽车、没有公共汽车,有行人;还有的图片有汽车、有公共汽车,没有行人等情况。 这些例子属于多标签分类问题,因为与单个输入图像相关联的有多个(这里是三个)不同的标签,对应图像中是否存在公交车、行人等情况。
3. 区别:
在多标签分类中,目标实际上是数字的向量。 对比多类分类(如手写数字分类,标签
只有一个数字,即使这个数字可以有十个不同的值),两者差异需要明白。
4. 构建方法:
- 一种方法是将其看作多个完全独立的机器,例如建立一个网络专门检测是否有汽车,第二个网络检测公交车,第三个网络检测行人。
- 另一种方法是训练一个神经网络同时检测汽车、公共汽车和行人。网络架构为输入层输入图像数据,最后一层有三个输出神经元,输出一个由三个数字组成的向量。因为要解决三个二元分类问题(是否有车、是否有公共汽车、是否有行人),所以在输出层为每个神经元使用合适的激活函数,根据输出结果判断相应物体是否存在。
5. 注意:
多类类分类和多标签分类有时会相互混淆。
卷积层和卷积神经网络
1. 神经网络层延申学习:
- 目前所涉及的神经网络层多为密集层类型,其特点是一层中的每个神经元都将前一层的所有激活作为输入。 仅使用密集层确实就能构建强大的学习算法,但为了更深入理解神经网络的强大能力,需要了解一下其他类型的层具有不同属性,比如卷积层。
2. 密集层与卷积层的对比:
- 回顾密集层,以隐藏层的神经元为例,其激活函数是前一层每个激活值的函数。 以输入为手写数字9的图像为例,在构建隐藏层时,卷积层的神经元不像密集层那样查看图像的所有像素,而是仅查看图像中的小矩形区域像素。如用蓝色表示的第一个隐藏单元、洋红色表示的第二个隐藏单元等,每个神经元都只关注图像的有限区域。
3. 卷积层的优势:
- 加快计算速度,因为神经元不需要处理整个图像的所有像素信息。
- 所需训练数据更少,使用卷积层的神经网络不太容易出现过拟合现象(过拟合的详细内容将在下周讨论使用学习算法的实用技巧时深入讲解)。
4. 卷积层的相关信息:
- 这种每个神经元只看输入图像一个区域的层被称为卷积层,由研究人员乔安娜·昆(joannaKun)提出了很多关于卷积如何工作并推广使用的细节。
- 当神经网络中有多个卷积层时,有时被称为卷积神经网络。
5. 卷积神经网络的示例——心电图信号分类:
- 以心电图信号分类为例说明卷积神经网络。在胸口放置两个电极可记录与心脏活动相对应的电压,心电图信号(ECG或EKG)是一系列数字,对应不同时间点曲线的高度,例如可能有100个数字。
- 学习任务是根据心电图信号对病人是否患有心脏病或可诊断的心脏问题进行分类。
- 将心电图信号旋转90度后作为输入,构建第一个隐藏层时,让第一个隐藏单元只看x1到x20,第二个隐藏单元看x11到x30,以此类推,最后一个隐藏单元看x81到100,每个单元都只对心电图信号的一个小窗口有反应,这就是一个卷积层(该层有九个单元)。
- 下一层(隐藏的第二层)也可以是卷积层,如第一个单元看前一层的前5个激活,第二个单元看另外5个数字,最后一个隐藏单元看5到9。 - 这些激活值输入到一个输出单元,该单元根据输入值做出关于是否有心脏病的精确判断。这是一个神经网络的例子,第一个隐藏层和第二个隐藏层是卷积层,输出层是输出单元。
6. 卷积层的架构选择:
- 在卷积层中有很多架构上的选择,如单个神经元的输入窗口大小、每个神经元占总神经元的比例等。
- 通过合理选择这些架构提示,可以有效地构建神经网络的新版本,对于某些应用,卷积层甚至比密集层更有效。
笔者注:吴恩达教授的这门课主要是讲基础性的神经网络,后面不会深入探讨卷积神经网络,但神经网络近期研究的方向之一就是其他类型的层。 前沿架构如Transformer模型、多头注意力模型(现在又出了专家和混合专家模型),这些研究都在于为神经网络发明新类型的层,并将不同类型的层连接作为构建块,形成更复杂、更强大的神经网络。