吴恩达机器学习笔记(5)—— 神经网络

又摸鱼摸了好久,终于开学了,不能再摸鱼了,这学期课都是嵌入式开发方面的,我给自己的电脑买了个新硬盘装了Linux,不再像以前在虚拟机里小打小闹了,折腾了好几天的新系统,现在有时间写新的笔记了。这次给大家带来的是神经网络,比较难,我可能写的也不是太明白,就看看吧。

非线性假设

其实神经网络是一个很古老的算法,不过在很长的一段时间内受计算机的机能所限,这个算法没有太大的进展。直到了现在,计算机的飞速发展,计算科学家们又重新拾起了神经网络这一个强大的算法。那神经网络能解决什么问题呢?在一些特征值很多的问题中,如果我们用普通的线性回归和Logistics回归的话,计算量会很大很大,复杂度会成几何式增长,同时也会很容易产生过拟合的现象。神经网络就很适合计算机图像识别,语音识别这种特征量特别多的问题。

模型展示

神经网络算法是模拟人类大脑工作的原理。我们大脑里充满了这样的神经元。神经元会通过轴突发送高于一定阀值的神经信号到达下一个神经元,这样不断的传递信息,来达到各种功能。

而在神经网络中我们用一个很简单的模型来模拟神经网络:

神经元模型

不同的数据进入这个黄色的圆圈里通过计算后输出,这一个过程来模拟神经元的工作。这个h(x)就是激励函数。必要时我们可以在输入的结点加上一个X0节点来当做偏置单元,这个节点是总是等于1的。
而神经网络就是一组这样的神经元模型链接在一起形成的一个网络模型,比如下图所示:

神经网络模型

一般来说,在这个神经网络中,Layer1层我们叫做输入层,我们这里输入我们的特征值x1,x2,x3......。Layer2层到最后一层都叫做隐藏层。这最后一层也就是图中的Layer3层我们就叫做输出层,输出最终假设的结果。
那么神经网络是怎么计算的呢,这里给出这个神经网络的计算过程(这是加上了偏置单元的计算过程):

这里的θ是每一条连线上的权重矩阵,下标的十位数表示是第几个输入元,个位表示是第几条连线,上标表是第几层的权重矩阵。而这里的g()就是sigmoid函数。以上就是我们通过数学定义了神经网络模型,我们也可以用向量来表示这个计算过程,有兴趣的可以自己推导或者直接去看原视频,这里就不展开复杂的解说了。

例子与直觉理解

这一节我们将通过例子来直观的理解神经网络的工作过程。我们这次用一个简单的问题来带大家理解:

其实这个问题就是简单的异或运算。首先我们先构建一个神经元节点,分别给每一条链接上的权重分别赋值-30,20,20。这样我们神经元计算的也就是h(x)= g(20*x1 + 20 * x2 + -30), 分别再把四种不同的输入进去来看看这个神经元的计算结果。

g

我们可以通过输出可以看出,这个神经元表示的是逻辑运算中的和运算。然后我们再建立出三种不同的逻辑运算的神经元:

我们再把这些逻辑运算神经元,组合起来形成一个神经网络

我们就可以看出,这个组合的效果就是运算异或的方法。通过这个例子我们可以知道,神经网络的工作原理,就是通过调整权重来让每一个神经元实现某种功能,通过神经元的组合一起来共同实现我们所最终需要的功能。这种算法可以很有效的处理很多数据很大的问题。但是训练好的神经网络模型中的各个神经元所实现的功能我们是无法知道的,所以我们才称为神经网络是一个黑箱算法。

多元分类

神经网络也可以进行分类,如何用神经元来做到多元分类呢?这里也是举个例子,如果我们要让神经网络来识别图片中的车子是汽车还是卡车还是自行车呢。我们就让神经网络有三个输出。如果是汽车的就分别输出[1,0,0],如果是卡车就分别输出[0, 1, 0],如果是自行车就输出[0, 0, 1]这通过样的输出来训练神经网络,来达到多元分类的目的。

后记

神经网络就这样讲完了,后面将给大家带来反向传播神经网络,会更加难以理解,我也需要很长时间来消化和理解,可能会过很长时间再更新了。

你可能感兴趣的:(吴恩达机器学习笔记(5)—— 神经网络)