Neural Network
今天,学习了NG机器学习中的神经网络算法,以下是我个人总结,欢迎大家指出问题。
为什么我们需要神经网络:
举个例子:
给出一些图片,让我们用计算机识别它是否是一辆汽车,假设它是50*50像素的图片。
(我想这是比较小的,很多图片都要大于这个规模)
每个像素点,我们可以看成是一个特征值,那么就一共有2500个特征值了(这只是使用灰度图片的情况,数值代表像素点的亮度,如果考虑RGB图像色彩,每个像素点包含红,绿,蓝三个子像素,则有7500个)。如果我们只是考虑最高项为二次项来解决这个问题,那么所有的二次项(类似x1^2, x1*x2的组合)就有大约300万个,这个数字实在是太大了。那三次项,四次项呢?肯定超过我们的接受范围了。
神经网络算法可以比较好的解决这个问题,即使在特征值n比较大的时候,依旧可以给出一个很好的解。
当然,神经网络的用处肯定不只这一个,这里我只给出这一个例子。
神经网络的术语介绍
这里我只给出对于上图的一些直观解释,不会给出特别正式的定义。
输入层:
就是我们的输入,在图上的表示是Layer 1:x0, x1,x2,x3(x0我们有时候会省略,x0被称为偏置单元或者偏置神经元,数值为1)
输出层:
通过这个算法得出的结果Layer 3.
隐藏层:
除了输入层和输出层,就是隐藏层啦,在上图也就是Layer 2。为什么说是隐藏层呢?因为在监督学习的训练集中,我们只可以看到输入和输出,中间的计算却是看不到的,所以我们叫它隐藏层。
隐藏层也有偏置单元
隐藏层可以不只一层。
激励函数:
(中文感觉怪怪的,英文是activation function)
对类似非线性函数g(z)的另一种术语称呼。
Sigmoid(logistic) activation function.
g(z) = 1 / (1+e^(-z))
在NG视频中的一些符号意义
这里偏置单元没有画出来
这里的激励(activation)是由具体的神经元读入,计算并输出的那个值。
是指第j层到下一层的映射函数。
样例(根据上图):
那么我们会有:
简单样例:
AND
输入x1,x2,输出x1 and x2的真值。
我们可以如下图一样去设置映射函数theta(大家注意一下theta设置的值,也就是图上的-30,20,20,是不是很巧妙?),得出输出单元后再取sigmoid函数,取其近似值。
OR
说明跟上面差不多,也就不重复叙述了。
Not
同上
XNOR
这个是综合的例子,大家好好看看。
下面的图中,左下方的图是上方3个图的综合,大家注意一下线条的颜色,颜色也是一一对应的。