神经网络笔记 | 1 – 非线性假设

我们有时候会遇到相当棘手的问题,比如区分下面这样的数据:

此时我们用逻辑回归,可能会解决的很好

但是这个训练集才只有两个特征,万一特征值非常多呢?比如一个房子拥有以下特征

上述累加多项式就会显得非常臃肿,并且使得算法运行极其缓慢

而这个问题非常实际,比如一个计算机视觉的问题

区分一个门把手,就要去识别这么多个像素数据库

然后,计算机视觉的问题实际上经常变化成一个逻辑回归问题

这个涉及到的特征值,就50*50的像素的点,都会产生2500个特征维度,如果要计算所有的平方和三次方之类的,那这个数会大的离谱,导致学习算法完全运行不起来。

对于这个问题,人们想出了更复杂的算法——神经网络

神经元与大脑

这个算法有异常悠久的历史,实际上人们当初想做一个智慧机器的时候,第一个想到的就是去模仿人脑。不过因为技术落后,被搁置了一段时间。

理解这个算法,我们需要理解大脑如何运作的

如果把一只小鼠的听觉神经切断,再接合到眼神经上,最终结果是听觉皮层将会学会处理视觉图像的信息。另外,如果把触觉神经接合到视觉上,触觉神经也将学会如何使用视觉信号的处理。

因此理论上,有一些算法应该能处理不同的数据,对不同的数据类型产生不同的应对效果,并且导出相当不错的结果。

还有更多的的例子,比如失明的孩子,可以通过打响指进行声纳投篮。其他例子就不去讲述了,有兴趣的可以去谷歌搜索相关文献记录

神经元的构造

可以看到,神经元有多个输入通道(“input”),然后cell body可以看作一个计算单元,然后通过轴突到输出单元(“output”),如下图两个神经元工作的的状态

而这些正是人类完成所有智慧任务的基本构造

映射在计算机中,应该是这样的:一个函数接收多个参数,经过计算之后输出一种数据(相当简单的一个模型)

契合我们过去学过的各种回归知识,说实在就是一个矩阵处理的过程。

但是,实际上神经系统的运动是多个神经元组合工作的过程,像这样

(注意这里多了一个X0,这被称之为偏置单元或者偏置神经元,X0总是等于0,这里实际上也省略了a0)

  • Layer1通常被称之为输入层
  • Layer2被称之为隐藏层
  • Layer3是输出层

一些专业术语的解释如下:

所以上述的计算过程可以如下图表示(一共有三组数据,输入了三个所谓的“神经元”中,然后最后输出后再经过一个“终端神经元”,最后输出)

每个计算神经元都能获得不同权重的参数(由Θ控制),并且进行激活函数(g())的计算,然后每个隐藏神经元计算完成后,会把参数传导给hθ  再进行一次类隐藏层的计算(因为也有一个权重矩阵),以此类推获得输出值。(这个理解比较难,需要自己慢慢看PPT,还有个办法是,把每条线想象成一个θ,而这个Θ矩阵,就是所有θ的集合而已)

发表评论