深度学习入门—基于python的理论与实现笔记

感知机

  1. 感知机的例子:x1、x2 是输入信号,y 是输出信号,w1、w2 是权重(w 是 weight 的首字母)。图中的○称为“神经元”或者“节点”。输入信号被送往神经元时,会被分别乘以固定的权重(w1x1、w2x2)。神经元会计算传送过来的信号的总和,只有当这个总和超过了某个界限值时,才会输出 1。这也称为“神经元被激活”。这里将这个界限值称为阈值,用符号 θ 表示。
  2. w1 和 w2 是控制输入信号的重要性的参数,相当于电流里所说的电阻,感知机的权重则是值越大,通过的信号就越大。
  3. 偏置 b是调整神经元被激活的容易程度。
  4. 感知机的局限性:“单层感知机无法表示异或门”或者“单层感知机无法分离非线性空间”,通过组合感知机(叠加层)就可以实现异或门。
  5. 多层感知机:与门、或门是单层感知机,而异或门是 2 层感知机。叠加了多层的感知机也称为多层感知机。
  6. 感知机通过叠加层能够进行非线性的表示,理论上还可以表示计算机进行的处理。在用与非门等低层的元件构建计算机的情况下,分阶段地制作所需的零件(模块)会比较自然,即先实现与门和或门,然后实现半加器和全加器,接着实现算数逻辑单元(ALU),然后实现 CPU。因此,通过感知机表示计算机时,使用叠加了多层的构造来实现是比较自然的流程。

神经网络

  1. 感知机设定权重的工作,即确定合适的、能符合预期的输入与输出的权重,现在还是由人工进行的,神经网络的一个重要性质是它可以自动地从数据中学习到合适的权重参数。
  2. 激活函数:hx)函数会将输入信号的总和转换为输出信号,这种函数一般称为激活函数
  3. “朴素感知机”是指单层网络,指的是激活函数使用了阶跃函数 {1[阶跃函数是指一旦输入超过阈值,就切换输出的函数。]} 的模型。“多层感知机”是指神经网络,即使用 sigmoid 函数(后述)等平滑的激活函数的多层网络。
  4. 神经网络中使用sigmoid 函数(sigmoid function)进行信号的转换,转换后的信号被传送给下一个神经元。exp(-x) 表示 e-x 的意思。e 是纳皮尔常数 2.7182 ...。函数就是给定某个输入后,会返回某个输出的转换器。比如,向 sigmoid 函数输入 1.0 或 2.0 后,就会有某个值被输出,类似 h(1.0) = 0.731 ...、h(2.0) = 0.880 ... 这样。
  5. 阶跃函数与 sigmoid 函数:sigmoid 函数是一条平滑的曲线,输出随着输入发生连续性的变化。而阶跃函数以 0 为界,输出发生急剧性的变化。感知机中神经元之间流动的是 0 或 1 的二元信号,而神经网络中流动的是连续的实数值信号。阶跃函数就像竹筒敲石一样,只做是否传送水(0 或 1)两个动作,而 sigmoid 函数就像水车一样,根据流过来的水量相应地调整传送出去的水量。
  6. “非线性函数”和“线性函数”:线性函数是输出值是输入值的常数倍的函数,是一条笔直的直线。而非线性函数,顾名思义,指的是不像线性函数那样呈现出一条直线的函数。
  7. ReLU(Rectified Linear Unit)函数:ReLU 函数在输入大于 0 时,直接输出该值;在输入小于等于 0 时,输出 0
  8. 权重和隐藏层的神经元的右上角有一个“(1)”,它表示权重和神经元的层号(即第 1 层的权重、第 1 层的神经元)。此外,权重的右下角有两个数字,它们是后一层的神经元和前一层的神经元的索引号。
  9. 恒等函数和 softmax 函数:恒等函数会将输入按原样输出,对于输入的信息,不加以任何改动地直接输出。softmax 函数exp(x) 是表示 ex 的指数函数(e 是纳皮尔常数 2.7182 ...)。式(3.10)表示假设输出层共有 n 个神经元,计算第 k 个神经元的输出 yk。如式(3.10)所示,softmax 函数的分子是输入信号 ak 的指数函数,分母是所有输入信号的指数函数的和。
  10. 实现 softmax 函数时的注意事项:计算机的运算上有一定的缺陷。这个缺陷就是溢出问题。softmax 函数的实现中要进行指数函数的运算,但是此时指数函数的值很容易变得非常大。比如,e10 的值会超过 20000,e100 会变成一个后面有 40 多个 0 的超大值,e1000 的结果会返回一个表示无穷大的 inf。如果在这些超大值之间进行除法运算,结果会出现“不确定”的情况。(计算机处理“数”时,数值必须在 4 字节或 8 字节的有限数据宽度内。这意味着数存在有效位数,也就是说,可以表示的数值范围是有限的。因此,会出现超大值无法表示的问题。这个问题称为溢出,在进行计算机的运算时必须(常常)注意。)

  11. 对神经网络的输入数据进行某种既定的转换称为预处理(pre-processing),把数据限定到某个范围内的处理称为正规化(normalization)。将数据整体的分布形状均匀化的方法,即数据白化(whitening)

  12. 批处理一次性计算大型数组要比分开逐步计算各个小型数组速度更快。大多数处理数值计算的库都进行了能够高效处理大型数组运算的最优化。并且,在神经网络的运算中,当数据传送成为瓶颈时,批处理可以减轻数据总线的负荷(严格地讲,相对于数据读入,可以将更多的时间用在计算上)。

  13. “特征量”是指可以从输入数据(输入图像)中准确地提取本质数据(重要的数据)的转换器,使用这些特征量将图像数据转换为向量,然后对转换后的向量使用机器学习中的 SVM、KNN 等分类器进行学习。

  14. 深度学习有时也称为端到端机器学习(end-to-end machine learning)。也就是从原始数据(输入)中获得目标结果(输出)的意思。

  15. 泛化能力是指处理未被观察过的数据(不包含在训练数据中的数据)的能力。

  16. 均方误差会计算神经网络的输出和正确解监督数据的各个元素之差的平方,再求总和。

  17. 我们从全部数据中选出一部分,作为全部数据的“近似”。神经网络的学习也是从训练数据中选出一批数据(称为 mini-batch, 小批量),然后对每个 mini-batch 进行学习。比如,从 60000 个训练数据中随机选择 100 笔,再用这 100 笔数据进行学习。这种学习方式称为 mini-batch 学习

  18. 如果以识别精度为指标,则参数的导数在绝大多数地方都会变为 0。sigmoid 函数的导数在任何地方都不为 0。

  19. 数值微分就是用数值方法近似求解函数的导数的过程。

  20. 有多个变量的函数的导数称为偏导数。

  21. 由全部变量的偏导数汇总而成的向量称为梯度(gradient)

误差反向传播法

  1. ReLU 层的作用就像电路中的开关一样。正向传播时,有电流通过的话,就将开关设为 ON;没有电流通过的话,就将开关设为 OFF。反向传播时,开关为 ON 的话,电流会直接通过;开关为 OFF 的话,则不会有电流通过。
  2. 数值微分的优点是实现简单,因此,一般情况下不太容易出错。而误差反向传播法的实现很复杂,容易出错。所以,经常会比较数值微分的结果和误差反向传播法的结果,以确认误差反向传播法的实现是否正确。确认数值微分求出的梯度结果和误差反向传播法求出的结果是否一致(严格地讲,是非常相近)的操作称为梯度确认(gradient check)。
  3. 为了找到最优参数,我们将参数的梯度(导数)作为了线索。使用参数的梯度,沿梯度方向更新参数,并重复这个步骤多次,从而逐渐靠近最优参数,这个过程称为随机梯度下降法(stochastic gradient descent),简称 SGD
  4. Momentum、AdaGrad、Adam这 3 种方法来取代SGD,SGD 呈“之”字形移动。这是一个相当低效的路径,SGD 低效的根本原因是,梯度的方向并没有指向最小值的方向。
  5. Momentum 解决式(6.2)的最优化问题:更新路径就像小球在碗中滚动一样。和 SGD 相比,我们发现“之”字形的“程度”减轻了。这是因为虽然 x 轴方向上受到的力非常小,但是一直在同一方向上受力,所以朝同一个方向会有一定的加速。反过来,虽然 y 轴方向上受到的力很大,但是因为交互地受到正方向和反方向的力,它们会互相抵消,所以 y 轴方向上的速度不稳定。因此,和 SGD 时的情形相比,可以更快地朝 x 轴方向靠近,减弱“之”字形的变动程度。
  6. AdaGrad(学习率衰减(learning rate decay) ):AdaGrad 会为参数的每个元素适当地调整学习率,新出现了变量 h,它保存了以前的所有梯度值的平方和,在更新参数时,通过乘以\frac{1}{\sqrt{\boldsymbol{h}}},就可以调整学习的尺度。这意味着,参数的元素中变动较大(被大幅更新)的元素的学习率将变小。也就是说,可以按参数的元素进行学习率衰减,使变动大的参数的学习率逐渐减小。
  7. AdaGrad 会记录过去所有梯度的平方和。因此,学习越深入,更新的幅度就越小。实际上,如果无止境地学习,更新量就会变为 0,完全不再更新。为了改善这个问题,可以使用 RMSProp [7] 方法。RMSProp 方法并不是将过去所有的梯度一视同仁地相加,而是逐渐地遗忘过去的梯度,在做加法运算时将新梯度的信息更多地反映出来。这种操作从专业上讲,称为“指数移动平均”,呈指数函数式地减小过去的梯度的尺度。
  8. AdaGrad应用:函数的取值高效地向着最小值移动。由于 y 轴方向上的梯度较大,因此刚开始变动较大,但是后面会根据这个较大的变动按比例进行调整,减小更新的步伐。因此,y 轴方向上的更新程度被减弱,“之”字形的变动程度有所衰减。
  9. Adam:融合Momentum和AdaGrad,有望实现参数空间的高效搜索,此外,进行超参数的“偏置校正”也是 Adam 的特征。
  10. 权重初始值不能设为 0 ,为了防止“权重均一化”(严格地讲,是为了瓦解权重的对称结构),必须随机生成初始值。

  11. 各层的激活值呈偏向 0 和 1 的分布。这里使用的 sigmoid 函数是 S 型函数,随着输出不断地靠近 0(或者靠近 1),它的导数的值逐渐接近 0。因此,偏向 0 和 1 的数据分布会造成反向传播中梯度的值不断变小,最后消失。这个问题称为梯度消失(gradient vanishing)。层次加深的深度学习中,梯度消失的问题可能会更加严重。

  12. 如果传递的是有所偏向的数据,就会出现梯度消失或者“表现力受限”的问题,导致学习可能无法顺利进行。

  13. 如果设定了合适的权重初始值,则各层的激活值分布会有适当的广度

  14. Batch Normalization:调整各层的激活值分布使其拥有适当的广度。为此,要向神经网络中插入对数据分布进行正规化的层,即 Batch Normalization 层(下文简称 Batch Norm 层)。优点:可以使学习快速进行(可以增大学习率),不那么依赖初始值对权重初始值变得健壮(对于初始值不用那么神经质),抑制过拟合(降低 Dropout 等的必要性)。

  15. 过拟合原因:模型拥有大量参数、表现力强,训练数据少

  16. 权值衰减是一直以来经常被使用的一种抑制过拟合的方法。该方法通过在学习的过程中对大的权重进行惩罚,来抑制过拟合。为损失函数加上权重的平方范数(L2 范数)\frac{1}{2}\lambda\boldsymbol{W}^2λ 是控制正则化强度的超参数。λ 设置得越大,对大的权重施加的惩罚就越重。

  17. L2 范数相当于各个元素的平方和。用数学式表示的话,假设有权重 W=(w1, w2,···,wn),则 L2 范数可\sqrt{w^2_1+w^2_2+\cdots+w^2_n}计算出来。除了 L2 范数,还有 L1 范数、L ∞范数等。L1 范数是各个元素的绝对值之和,相当于 |w1| + |w2| +···+ |wn|。L∞范数也称为 Max 范数,相当于各个元素的绝对值中最大的那一个。L2 范数、L1 范数、L∞范数都可以用作正则化项,它们各有各的特点,不过这里我们要实现的是比较常用的 L2 范数。

  18. Dropout 是一种在学习的过程中随机删除神经元的方法。训练时,随机选出隐藏层的神经元,然后将其删除。被删除的神经元不再进行信号的传递。

  19. 集成学习,就是让多个模型单独进行学习,推理时再取多个模型的输出的平均值。

  20. 不能用测试数据评估超参数的性能:用测试数据确认超参数的值的“好坏”,就会导致超参数的值被调整为只拟合测试数据。用于调整超参数的数据,一般称为验证数据(validation data)。

  21. 进行神经网络的超参数的最优化时,与网格搜索等有规律的搜索相比,随机采样的搜索方式效果更好。这是因为在多个超参数中,各个超参数对最终的识别精度的影响程度不同。超参数的范围只要“大致地指定”就可以了。所谓“大致地指定”,是指像 0.001(10-3)到 1000(103)这样,以“10 的阶乘”的尺度指定范围(也表述为“用对数尺度(log scale)指定”)。在超参数的最优化中,减少学习的 epoch,缩短一次评估所需的时间是一个不错的办法。超参数的最优化中,如果需要更精炼的方法,可以使用贝叶斯最优化(Bayesian optimization)。贝叶斯最优化运用以贝叶斯定理为中心的数学理论,能够更加严密、高效地进行最优化。

卷积神经网络

  1. 相邻层的所有神经元之间都有连接,这称为全连接
  2. 卷积运算:卷积运算以一定间隔滑动滤波器的窗口并应用。这里所说的窗口是指图 7-4 中灰色的 3 × 3 的部分。如图 7-4 所示,将各个位置上滤波器的元素和输入的对应元素相乘,然后再求和(有时将这个计算称为乘积累加运算)。然后,将这个结果保存到输出的对应位置。将这个过程在所有位置都进行一遍,就可以得到卷积运算的输出。
  3. 填充:使用填充主要是为了调整输出的大小。比如,对大小为 (4, 4) 的输入数据应用 (3, 3) 的滤波器时,输出大小变为 (2, 2),相当于输出大小比输入大小缩小了 2 个元素。这在反复进行多次卷积运算的深度网络中会成为问题。为什么呢?因为如果每次进行卷积运算都会缩小空间,那么在某个时刻输出大小就有可能变为 1,导致无法再应用卷积运算。为了避免出现这样的情况,就要使用填充。在刚才的例子中,将填充的幅度设为 1,那么相对于输入大小 (4, 4),输出大小也保持为原来的 (4, 4)。因此,卷积运算就可以在保持空间大小不变的情况下将数据传给下一层。

  4. 应用滤波器的位置间隔称为步幅(stride)。增大步幅后,输出大小会变小。而增大填充后,输出大小会变大。当输出大小无法除尽时(结果是小数时),需要采取报错等对策。顺便说一下,根据深度学习的框架的不同,当值无法除尽时,有时会向最接近的整数四舍五入,不进行报错而继续运行。

  5. 卷积运算的处理流(批处理):在各个数据的开头添加了批用的维度。像这样,数据作为 4 维的形状在各层间传递。这里需要注意的是,网络间传递的是 4 维数据,对这 N 个数据进行了卷积运算。也就是说,批处理将 N 次的处理汇总成了 1 次进行。

  6. 池化层:池化是缩小高、长方向上的空间的运算,除了 Max 池化之外,还有 Average 池化等。相对于 Max 池化是从目标区域中取出最大值,Average 池化则是计算目标区域的平均值。在图像识别领域,主要使用 Max 池化。因此,本书中说到“池化层”时,指的是 Max 池化。

  7. 池化层的特征:1.没有要学习的参数   2.通道数不发生变化  3.对微小的位置变化具有鲁棒性。  输入数据发生微小偏差时,池化仍会返回相同的结果。

你可能感兴趣的:(机器学习NLP)