非线性假设
非线性分类中,要想给出一个较为准确的拟合曲线,必须要加很多多次项。如下面的例子:
当有100个特征时,光包含所有的二次项,就会新产生5000个特征,三次项,就会有大约170000个特征。
再看一个计算机视觉中的例子
计算机通过输入的图片来识别物体,而这些图片是通过对每个点的“描述”,即输入每个点的灰度值,来让计算机“看到”这个图片的。
要是只给出一个50×50像素的图片来作为训练的样本,那么特征就会达到2500个,要是用RGB(计算机中彩图的表示形式,red,green,blue),那么将会有7500个特征。那么要想包含所有的二次项,将会有3百万个特征。
这样的话,运算成本太高了。
神经网络
起源
利用算法模拟人脑的学习方法。
经过神经重接实验,人们发现人脑中某一块之前做其他工作的部位,经过重接之后会学会其他的功能。比如,将处理触觉的大脑皮层接到视觉信号上,那么这块皮层将学会“看东西”。
人们由此联想到,有没有一种通用的算法可以同时处理视觉、触觉等等。
神经元
大脑中一个神经元由细胞体、树突、轴突等组成。树突和轴突是各个神经元之间的联系通道。树突向细胞体输入信息,细胞体处理之后,通过轴突输出。简而言之,神经元就是一个计算单元,将树突输入的信息处理之后通过轴突传递给其他神经元。
模拟神经元
- 单个的神经元
中间的圆圈代表神经元中的细胞体,在神经网络中被称为一个计算单元。它处理输入的 x 0 , x 1 , x 2 , x 3 x_0,x_1,x_2,x_3 x0,x1,x2,x3,然后输出 h θ ( x ) = 1 1 + e − θ T x h_\theta(x)=\frac{1}{1+e^{-\theta^\mathrm T x}} hθ(x)=1+e−θTx1。其中 x 0 x_0 x0被称为偏置单元,恒等于1。 - 神经网络
由多层神经元组成,每层都有多个神经元(最后一层视问题而定,可能只有一个),其中第一层被称为输入层,最后一层被称为输出层,除了这两层其余的全部被称为影藏层。每层都有一个恒等于1的偏置层。 - 神经网络是如何计算的
a i ( j ) a_i^{(j)} ai(j)表示第j层的第i个神经元的激活项,即就是该神经元计算并输出的值。
θ ( j ) \theta^{(j)} θ(j)表示第j层到第j+1层映射的参数(/权重)矩阵。
神经网络的向量化计算(前向传播)
如上图右半部分所示,定义x向量和
z
(
2
)
z^{(2)}
z(2)向量,其中
z
1
(
2
)
z_1^{(2)}
z1(2)表示第二层中第一个神经元的输入,它的输出就为
g
(
z
1
(
2
)
)
g(z_1^{(2)})
g(z1(2)),为了统一,我们把输入层表示成
a
(
1
)
a^{(1)}
a(1),神经网络的向量化计算表示就为
z
(
2
)
=
θ
(
1
)
a
(
1
)
a
(
2
)
=
g
(
z
(
2
)
)
z^{(2)}=\theta^{(1)}a^{(1)} \\ a^{(2)}=g(z^{(2)})
z(2)=θ(1)a(1)a(2)=g(z(2))
其中
θ
(
1
)
\theta^{(1)}
θ(1)为一个3×4的矩阵,
a
(
1
)
=
x
a^{(1)}=x
a(1)=x表示输入,为一个四维列向量。计算结果
z
(
2
)
z^{(2)}
z(2)为一个三维列向量。对
z
(
2
)
z^{(2)}
z(2)每个元素作用Logistic函数,得到第二层每个神经元的输出,将其表示为一个三维列向量
a
(
2
)
a^{(2)}
a(2)。最后加一个偏置单元
a
0
(
2
)
a_0^{(2)}
a0(2),使
z
(
2
)
z^{(2)}
z(2)成为一个四维列向量,作为最后一层的输入。计算
a
(
3
)
a^{(3)}
a(3)也就是最后的假设函数
h
θ
(
x
)
h_\theta(x)
hθ(x)。
这个计算
h
θ
(
x
)
h_\theta(x)
hθ(x)的过程也被称为前向传播,从输入单元的激活项开始,进行前向传播给隐藏层,计算隐藏层的激活项,然后继续前向传播给输出层,计算输出层的激活项。
- 神经网络的架构
神经网络可以有不同的架构,如下图
通过神经网络计算的具体例子
一个简单的神经网络
这个例子中只有两个特征
x
1
和
x
2
x_1和x_2
x1和x2,为了简单介绍,其取值都只为0或1。将其可以扩展为右图所示的非线性分类问题。对于这个问题,我们需要求出假设函数
y
=
x
1
y=x_1
y=x1 XNOR
x
2
\ x_2
x2
- 利用神经网络模拟出AND
给每个输入指定一个权重(-30,20,20),根据右上角的Logistic函数图像,我们可以确定当输入为不同的组合时,这个神经元的激活项的值。同过真值表,我们可以发现,这个真值表表示的是 x 1 x_1 x1 AND x 2 x_2 x2 - 利用神经网络模拟或
- 逻辑非
- 组合在一起
- 总结
当神经网络有很多层时,在第二层有一些关于输入的相对简单的函数,第三层又在此基础上计算更加复杂的方程,往后计算的函数越来越复杂。这样就能利用神经网络来计算非常复杂的非线性假设。
用神经网络区分多类别
下面是一个多分类的问题,判断图片是什么物体。
这时,输出层就不止一个神经元了。因为要分四类,所以输出层有四个神经元。其结果就表示了特定的输入位于哪个类别。训练集的表示如下:
(
x
(
i
)
,
y
(
i
)
)
(x^{(i)},y^{(i)})
(x(i),y(i))表示样本中的一个数据,
x
(
i
)
x^{(i)}
x(i)就是四种物体中的某一种图像,
y
(
i
)
y^{(i)}
y(i)就是上面的向量中的一个,表示图像对应的分类。
多类别分类就是要找到一个函数
h
θ
(
x
(
i
)
)
≈
y
(
i
)
h_\theta(x^{(i)}) \approx y^{(i)}
hθ(x(i))≈y(i),这里的输出值
h
θ
(
x
(
i
)
)
h_\theta(x^{(i)})
hθ(x(i))和
y
(
i
)
y^{(i)}
y(i)都为四维向量,表示输入的
x
(
i
)
x^{(i)}
x(i)所在的分类。