前言

泪目!在学完线性回归、Logistic回归以及它们的过拟合之后,终于来到了神经网络部分的学习。我当时学习吴恩达教授的机器学习课程的主要动机就是为了深入了解神经网络的数学原理和实现方法,以更好地从硬件层面了解忆阻器怎么实现“硬件级神经网络”的构架和实现。现在终于来了!

前述算法的局限性

当一个数据集的参数非常多时,用Logistic回归算法拟合出的假设方程将会有非常多参数项,且随维数增加参数项数量将以非常大的速度增加,这限制了机器学习在实际场景(参数会非常多)中的应用。

image-20210113132433257

例如,在对于汽车图片的识别中,一张50*50像素的汽车图片就有2500个参数,如果考虑RGB颜色的话,参数量更是拓展到了7500个。更可怕的是,其假设函数的参数项将达到三百万的量级。这种量级的机器学习分类对Logistic算法来说简直不可能实现。实际上,我们使用神经网络算法来解决这个问题。

神经网络算法

神经网络算法模拟了大脑中的神经元或者神经网络,如下图:

image-20210113134826336

其中,“Dendrite”指树突,是神经元接受信息的通道;“Axon”指轴突,是输出信息的通道;神经元本身则负责进行计算。三者构成一个系统,进行信息的处理和传输。

神经元与神经网络

以下是在神经网络算法中的一个最简单的模型,我们称之为Sigmoid(Logistic)激活函数人工神经元。激活函数实质上就是非线性假设的另一种叫法。此外,θ在前面几节课中我们称为参数,但在神经网络算法中人们一般称其为模型的权重。

image-20210113135933440

神经网络实质上就是一组神经元连接在一起的集合,其基本结构建如下:

image-20210113140643411

其中,Layer1称为输入层,Layer2称为隐藏层,Layer3称为输出层,隐藏层可以不只有一个。

image-20210113141257532

对于一个神经网络,其基本示意图如上。ai(j)实际上代表了第j层第i个激活单元(即一个算子)的一个运算结果。上图中,隐藏层利用算法计算输入的数据,然后再将结果继续输出到输出层,在输出层经过处理后,得到了假设函数hθ(x)的结果。

前向传播算法的向量化表示,见下图:

image-20210113144432737

实际问题举例-逻辑运算

image-20210113150118916

首先,我们从“逻辑与”的神经网络入手考虑这个问题。我们如何利用神经网络解决“逻辑与”运算呢?吴教授通过对输入层“+1”实现了这个算法。如下图所示:

image-20210113150727937

同理,通过更改输入层“+1”的权重为-10,我们还可以通过神经网络得到“逻辑或”的结果,如下图:

image-20210113150913848

此外,“逻辑非”的神经网络实现方法如下所示:

image-20210113151230436

再者,我们还可以通过神经网络实现“逻辑与非”即(NOT x1) AND (NOT x2),如下图所示:

image-20210113152044571

接下来,我们开始考虑“逻辑异或”应该怎么实现。事实上,“逻辑异或”正是“逻辑与”、“逻辑与非”、“逻辑或”组合而成的。如下图所示:

image-20210113152518301

总结

机器学习算法学之前还觉得挺神秘高级,学完之后也觉得不过如此。其核心思想在于把一个大问题拆解为多个层级,通过每一层级的递归处理实现用参数(即权重)表示原问题的目的,并得到假设函数。那么机器学习所使用的训练集对于神经网络算法来说,实质上就是在更改神经网络各层的参数。通过这个方式,我们将很好地把复杂问题简单化,并且让计算机为我们处理。