非线性假设
无论是线性回归还是逻辑回归都有这样一个缺点,即:当特征太多时,计算的负荷会非常大。
- 下面是一个监督学习分类问题的例子:
- 利用 logistc 逻辑回归,来解决这个问题,构造一个包含很多非线性项的 logistc 回归函数,当只有两个特征 x 1 , x 2 x_1,x_2 x1,x2 时,这种方法确实能得到不错的结果。
- 之前我们已经看到过,使用非线性的多项式项,能够帮助我们建立更好的分类模型。假设我们有非常多的特征,例如大于100 个变量,我们希望用这 100 个特征来构建一个非线性的多项式模型,结果将是数量非常惊人的特征组合,即便我们只采用两两特征的组合 x 1 x 2 + x 1 x 3 + x 1 x 4 + ⋯ + x 2 x 3 + x 2 x 4 + ⋯ + x 99 x 100 x_1x_2+x_1x_3+x_1x_4+\cdots+x_2x_3+x_2x_4+\cdots+x_{99}x_{100} x1x2+x1x3+x1x4+⋯+x2x3+x2x4+⋯+x99x100,我们也会有接近 5000 个组合而成的特征。这对于一般的逻辑回归来说需要计算的特征太多了。
- 关于计算机视觉中的一个问题,使用机器学习算法来训练一个分类器来检测图像来判断图像是否为一辆汽车。
- 方法是我们利用很多汽车的图片和很多非汽车的图片,然后利用这些图片上一个个像素的值(饱和度或亮度)来作为特征。假如我们只选用灰度图片,每个像素则只有一个值(而非 RGB值,每个像素点包含红绿蓝三个值),我们可以选取图片上的两个不同位置上的两个像素,然后训练一个逻辑回归算法利用这两个像素的值来判断图片上是否是汽车。
- 假使我们采用的都是 50 x 50 像素的小图片,并且我们将所有的像素视为特征,则会有 2500 个特征,如果我们要进一步将两两特征组合构成一个多项式模型,则会有约 250 0 2 / 2 2500^2/2 25002/2 个(接近3百万个)特征。普通的逻辑回归模型,不能有效地处理这么多的特征,这时候我们需要神经网络。
- 方法是我们利用很多汽车的图片和很多非汽车的图片,然后利用这些图片上一个个像素的值(饱和度或亮度)来作为特征。假如我们只选用灰度图片,每个像素则只有一个值(而非 RGB值,每个像素点包含红绿蓝三个值),我们可以选取图片上的两个不同位置上的两个像素,然后训练一个逻辑回归算法利用这两个像素的值来判断图片上是否是汽车。
神经元与大脑
- 神经网络最初产生的目的是制造能模拟大脑的机器。
- 神经网络逐渐兴起于二十世纪八九十年代,应用得非常广泛。但由于各种原因,在 90 年代的后期应用减少了。但是最近,神经网络又东山再起了,其中一个原因是:神经网络是计算量有些偏大的算法。然而大概是由于近些年计算机的运行速度变快,才足以真正运行起大规模的神经网络。如今的神经网络对于许多应用来说是最先进的技术。
- 从某种意义上来说,如果我们能找出大脑的学习算法,然后在计算机上执行大脑学习算法或与之相似的算法,也许这将是我们向人工智能迈进做出的最好的尝试。
模型展示Ⅰ
- 神经网络模仿了大脑中的神经元或者神经网络。
- 每一个神经元都可以被认为是一个处理单元/神经核(processing unit/Nucleus),它含有许多输入/树突(input/Dendrite),并且有一个输出/轴突(output/Axon)。这条输出通道是用来给其他神经元传递信号/传递信息的。
- 神经元是一个计算单元,它从输入通道接受一定数目的信息,并做一些计算,然后将结果通过它的轴突传递到其他节点或者大脑中的其他神经元。
- 神经网络是大量神经元相互链接并通过电脉冲来交流的一个网络。
- 下面是一组神经元的示意图,神经元利用微弱的电流进行沟通。这些弱电流也称作动作电位,其实就是一些微弱的电流。所以如果神经元想要传递一个消息,它就会就通过它的轴突,发送一段微弱电流给其他神经元,这就是轴突。即输出通道连接到输入通道,或者连接到另外一个神经元的树突,接下来这个神经元接收这条消息,做一些计算,它有可能会反过来将在轴突上的自己的消息传给其他神经元。这就是所有人类思考的模型:我们的神经元把自己的收到的消息进行计算,并向其他神经元传递消息。
- 这是带有 sigmoid 或者 logistic 激活函数的人工神经元,在神经网络术语汇中,激活函数是指非线性函数
g
(
z
)
=
1
1
+
e
−
z
g(z) = \frac{1}{1+e^{-z}}
g(z)=1+e−z1,θ 为模型的参数,但在一些神经网络的文献里,可能会看到被称之为模型的权重;
- 神经网络其实就是一组神经元,连接在一起的集合。神经元的神经网络,效果如下:
- 其中, x 1 , x 2 , x 3 x_1,x_2,x_3 x1,x2,x3 是输入单元(input units),也可以画上额外的节点 x 0 x_0 x0,我们将原始数据输入给它们。 a 1 , a 2 , a 3 , 或 者 加 上 a 0 a_1,a_2,a_3,或者加上 a_0 a1,a2,a3,或者加上a0 是中间单元,它们负责将数据进行处理,然后呈递到下一层。 最后是输出单元,它负责计算 h θ ( x ) h_\theta(x) hθ(x)。
- 神经网络模型是许多逻辑单元按照不同层级组织起来的网络,每一层的输出变量都是下一层的输入变量。下图为一个 3 层的神经网络,第一层成为输入层(Input Layer),最后一层称为输出层(Output Layer),中间一层成为隐藏层(Hidden Layers)。我们为每一层都增加一个偏差单位(bias unit)。
- 为了解释这个神经网络,下面引入一些标记法来帮助描述模型:
- a i ( j ) a_i^{(j)} ai(j) 代表第 j 层的第 i 个激活单元。 θ ( j ) \theta^{(j)} θ(j) 代表从第 j 层映射到第 j+1 层时的权重的矩阵,例如 θ ( 1 ) \theta^{(1)} θ(1) 代表从第一层映射到第二层的权重矩阵。其尺寸为 s ( j + 1 ) ∗ ( s j + 1 ) s_{(j+1)}*(s_j+1) s(j+1)∗(sj+1):以第 j+1 层的激活单元数量为行数,以第 j 层的激活单元数加一为列数的矩阵。例如:上图所示的神经网络中 θ ( 1 ) \theta^{(1)} θ(1) 的尺寸为 3*4。
- 对于上图所示的模型,激活单元和输出分别表达为:
a 1 ( 2 ) = g ( θ 10 ( 1 ) x 0 + θ 11 ( 1 ) x 1 + θ 12 ( 1 ) x 2 + θ 13 ( 1 ) x 3 ) a_1^{(2)}=g(\theta_{10}^{(1)}x_0+\theta_{11}^{(1)}x_1+\theta_{12}^{(1)}x_2+\theta_{13}^{(1)}x_3) a1(2)=g(θ10(1)x0+θ11(1)x1+θ12(1)x2+θ13(1)x3)
a 2 ( 2 ) = g ( θ 20 ( 1 ) x 0 + θ 21 ( 1 ) x 1 + θ 22 ( 1 ) x 2 + θ 23 ( 1 ) x 3 ) a_2^{(2)}=g(\theta_{20}^{(1)}x_0+\theta_{21}^{(1)}x_1+\theta_{22}^{(1)}x_2+\theta_{23}^{(1)}x_3) a2(2)=g(θ20(1)x0+θ21(1)x1+θ22(1)x2+θ23(1)x3)
a 3 ( 2 ) = g ( θ 30 ( 1 ) x 0 + θ 31 ( 1 ) x 1 + θ 32 ( 1 ) x 2 + θ 33 ( 1 ) x 3 ) a_3^{(2)}=g(\theta_{30}^{(1)}x_0+\theta_{31}^{(1)}x_1+\theta_{32}^{(1)}x_2+\theta_{33}^{(1)}x_3) a3(2)=g(θ30(1)x0+θ31(1)x1+θ32(1)x2+θ33(1)x3)
h θ ( x ) = a 1 ( 3 ) = g ( θ 10 ( 2 ) a 0 ( 2 ) + θ 11 ( 2 ) a 1 ( 2 ) + θ 12 ( 2 ) a 2 ( 2 ) + θ 13 ( 2 ) a 3 ( 2 ) ) h_\theta(x)=a_1^{(3)}=g(\theta_{10}^{(2)}a_0^{(2)}+\theta_{11}^{(2)}a_1^{(2)}+\theta_{12}^{(2)}a_2^{(2)}+\theta_{13}^{(2)}a_3^{(2)}) hθ(x)=a1(3)=g(θ10(2)a0(2)+θ11(2)a1(2)+θ12(2)a2(2)+θ13(2)a3(2))
模型展示 Ⅱ
- 令
θ
10
(
1
)
x
0
+
θ
11
(
1
)
x
1
+
θ
12
(
1
)
x
2
+
θ
13
(
1
)
x
3
=
z
1
(
2
)
\theta_{10}^{(1)}x_0+\theta_{11}^{(1)}x_1+\theta_{12}^{(1)}x_2+\theta_{13}^{(1)}x_3 = z_1^{(2)}
θ10(1)x0+θ11(1)x1+θ12(1)x2+θ13(1)x3=z1(2) 所以有
a
1
(
2
)
=
g
(
z
1
(
2
)
)
a_1^{(2)}=g(z_1^{(2)})
a1(2)=g(z1(2)),依次类推,对神经网络的计算进行向量化,具体而言,我们将特征向量 x 定义为(
x
0
x_0
x0 照常等于 1):
x = [ x 0 x 1 x 2 x 3 ] x=\left[ \begin{matrix} x_0\\ x_1\\ x_2\\ x_3\\ \end{matrix} \right] x=⎣⎢⎢⎡x0x1x2x3⎦⎥⎥⎤- 然后定义
z
(
2
)
z^{(2)}
z(2) 为(3 维向量):
z ( 2 ) = [ z 1 ( 2 ) z 2 ( 2 ) z 3 ( 2 ) ] z^{(2)}=\left[ \begin{matrix} z_1^{(2)}\\ z_2^{(2)}\\ z_3^{(2)}\\ \end{matrix} \right] z(2)=⎣⎢⎡z1(2)z2(2)z3(2)⎦⎥⎤ - 接着,向量化
a
1
(
2
)
、
a
2
(
2
)
、
a
3
(
2
)
a_1^{(2)}、a_2^{(2)}、a_3^{(2)}
a1(2)、a2(2)、a3(2) 的计算,只需要两步:
z ( 2 ) = θ ( 1 ) x a ( 2 ) = g ( z ( 2 ) ) z^{(2)}=\theta^{(1)}x\\a^{(2)}=g(z^{(2)}) z(2)=θ(1)xa(2)=g(z(2)) - 为了符号一致,在输入层,我们有输入 x,可以把这些想成是第一层的激活项,定义
a
(
1
)
=
x
a^{(1)}=x
a(1)=x,
a
(
1
)
a^{(1)}
a(1) 就是一个向量了。这样就可以把
a
(
1
)
a^{(1)}
a(1) 定义为输入层的激活项,就可以把上面的
x
x
x 替换掉,变成
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))
- 然后定义
z
(
2
)
z^{(2)}
z(2) 为(3 维向量):
- 为了这个额外的偏置单元
a
0
(
2
)
a_0^{(2)}
a0(2),我们需要增加条件:
A d d a 0 ( 2 ) = 1 → a ( 2 ) ∈ R 4 z ( 3 ) = θ ( 2 ) a ( 2 ) h θ ( x ) = a ( 3 ) = g ( z ( 3 ) ) Add\ \ a_0^{(2)}=1\rightarrow\ a^{(2)}\in \Bbb{R}^4\\ z^{(3)}=\theta^{(2)}a^{(2)}\\ h_\theta(x)=a^{(3)}=g(z^{(3)}) Add a0(2)=1→ a(2)∈R4z(3)=θ(2)a(2)hθ(x)=a(3)=g(z(3))
计算 h θ ( x ) h_\theta(x) hθ(x) 的过程,也称为前向传播。 - 为了更好了解 神经网络(Neuron Networks)的工作原理,我们先把左半部分遮住:
- 右半部分其实就是以
a
0
(
2
)
、
a
1
(
2
)
、
a
2
(
2
)
、
a
3
(
2
)
a_0^{(2)}、a_1^{(2)}、a_2^{(2)}、a_3^{(2)}
a0(2)、a1(2)、a2(2)、a3(2),按照逻辑回归(Logistic Regression)的方式输出
h
θ
(
x
)
h_\theta(x)
hθ(x):
h θ ( x ) = g ( θ 10 ( 1 ) a 0 ( 2 ) + θ 11 ( 1 ) a 1 ( 2 ) + θ 12 ( 1 ) a 2 ( 2 ) + θ 13 ( 1 ) a 3 ( 2 ) ) h_\theta(x)=g(\theta_{10}^{(1)}a_0^{(2)}+\theta_{11}^{(1)}a_1^{(2)}+\theta_{12}^{(1)}a_2^{(2)}+\theta_{13}^{(1)}a_3^{(2)}) hθ(x)=g(θ10(1)a0(2)+θ11(1)a1(2)+θ12(1)a2(2)+θ13(1)a3(2)) - 这个神经网络所做的事,就像是逻辑回归,但是它不是使用原本的
x
1
、
x
2
、
x
3
x_1、x_2、x_3
x1、x2、x3 作为特征,而是用
a
1
(
2
)
、
a
2
(
2
)
、
a
3
(
2
)
a_1^{(2)}、a_2^{(2)}、a_3^{(2)}
a1(2)、a2(2)、a3(2) 作为新的特征,它们是学习得到的函数输入值,具体来说,就是从第一层映射到第二层的函数,这个函数由其他的参数
θ
(
1
)
\theta^{(1)}
θ(1) 决定。在神经网络中,它没有用输入特征
x
1
、
x
2
、
x
3
x_1、x_2、x_3
x1、x2、x3 来训练逻辑回归,而是自己训练逻辑回归的
a
1
(
2
)
、
a
2
(
2
)
、
a
3
(
2
)
a_1^{(2)}、a_2^{(2)}、a_3^{(2)}
a1(2)、a2(2)、a3(2),根据
θ
(
1
)
\theta^{(1)}
θ(1)选择的不同参数,可以学习到更复杂的特征,就可以得到更好的假设函数,这就是神经网络相比于逻辑回归和线性回归的优势。
- 右半部分其实就是以
a
0
(
2
)
、
a
1
(
2
)
、
a
2
(
2
)
、
a
3
(
2
)
a_0^{(2)}、a_1^{(2)}、a_2^{(2)}、a_3^{(2)}
a0(2)、a1(2)、a2(2)、a3(2),按照逻辑回归(Logistic Regression)的方式输出
h
θ
(
x
)
h_\theta(x)
hθ(x):
- 其他类型表示神经网络,神经元网络中神经元的连接方式,成为神经网络的架构。架构是指不同的神经元的连接方式
例子与直觉理解I
- 在神经网络中,原始特征只是输入层,在我们上面三层的神经网络例子中,第三层也就是输出层做出的预测利用的是第二层的特征,而非输入层中的原始特征,我们可以认为第二层中的特征是神经网络通过学习后自己得出的一系列用于预测输出变量的新特征。
- 神经网络中,单层神经元(无中间层)的计算可用来表示逻辑运算,比如逻辑与(AND)、逻辑或(OR)。
举例说明:逻辑与(AND 函数)
- 我们可以用这样的一个神经网络表示 AND 函数:(神经网络的设计与 output 层表达式)
- 其中
x
1
、
x
2
都
是
二
进
制
数
x_1、x_2都是二进制数
x1、x2都是二进制数;
- 其中
x
1
、
x
2
都
是
二
进
制
数
x_1、x_2都是二进制数
x1、x2都是二进制数;
- 为了得到只含单个神经元的网络来计算这个 AND 函数,额外加一个偏置单元,也称为 +1 单元,对神经网络中的权重(参数)进行赋值。其中
θ
10
(
1
)
=
−
30
,
θ
11
(
1
)
=
20
,
θ
12
(
1
)
=
20
\theta_{10}^{(1)}=-30,\theta_{11}^{(1)}=20,\theta_{12}^{(1)}=20
θ10(1)=−30,θ11(1)=20,θ12(1)=20 把这些值都想成是网络边界中连接这些参数的权值,我们的输出函数
h
θ
(
x
)
h_\theta(x)
hθ(x) 即为:
h
θ
(
x
)
=
g
(
−
30
+
20
x
1
+
20
x
2
)
h_\theta(x)=g(-30+20x_1+20x_2)
hθ(x)=g(−30+20x1+20x2) 我们知道
g
(
x
)
g(x)
g(x)的图像是:
- 上部分左边是 sigmod 函数,右边是真值表。
- 确实是逻辑与的计算结果,所以我们有: h θ ( x ) ≈ x 1 A N D x 2 h_\theta(x)\approx x_1ANDx_2 hθ(x)≈x1ANDx2,所以我们的 h θ ( x ) h_\theta(x) hθ(x) 就是 AND 函数。
举例说明:逻辑或(OR 函数)
- OR 与 AND 整体一样,区别只在于的取值不同。
样本和直观理解II
- 作为二元逻辑运算符,为了表示不同的运算符,我们只需要选择不同的权重即可。
- 下图的神经元(三个权重分别为 -30,20,20)可以被视为作用同于逻辑与(AND):
- 下图的神经元(三个权重分别为-10,20,20)可以被视为作用等同于逻辑或(OR):
- 下图的神经元(两个权重分别为 10,-20)可以被视为作用等同于逻辑非(NOT):
- 我们可以利用神经元来组合成更为复杂的神经网络以实现更复杂的运算。例如我们要实现 XNOR 功能(输入的两个值必须一样,均为1或均为0),即 XNOR = (
x
1
x_1
x1 AND
x
2
x_2
x2)OR ((NOT
x
1
x_1
x1)AND (NOT
x
2
x_2
x2)),首先构造一个能表达(NOT
x
1
x_1
x1)AND(NOT
x
2
x_2
x2)部分的神经元:(三个权重分别为 10,-20,-20)
- 然后将表示 AND 的神经元和表示(NOT
x
1
x_1
x1)AND(NOT
x
2
x_2
x2)的神经元以及表示 OR 的神经元进行组合:
- 我们就得到了一个能实现 XNOR 运算符功能的神经网络。按这种方法我们可以逐渐构造出越来越复杂的函数,也能得到更加厉害的特征值。这就是神经网络的厉害之处。
多元分类
- 要在神经网络中实现多类别分类,采用的方法本质上是一对多法的拓展。
计算机视觉的例子
- 我们不只需要识别出图中的汽车,还需要识别他们的类别,行人、汽车、摩托车和货车;
- 建立一个有四个输出单元的神经网络,现在神经网络的输出,将是一个含4个数的向量,输出变成了一个四维的向量,用第一个输出单元来判断,图中是否是一个行人,再用第二个输出单元判断图中是否是一辆汽车,再用第三个单元来判断图中是否是一辆摩托车,最后用第四个单元来判断图中是否是一辆货车;
- 当图中是一个行人时,理想情况下,网络会输出 1 0 0 0;当图中是一辆汽车时,理想情况下,网络会输出 0 1 0 0;当图中是一辆摩托车时,理想情况下,网络会输出 0 0 1 0;当图中是一个行人时,理想情况下,网络会输出 1 0 0 0;以此类推。我们有四个逻辑回归分类器,它们每一个都将识别到图中的物体,是否是四种类别中的一种神经网络算法的输出结果为四种可能情形之一。
- 四输出单元的神经网络,对应不同图片的取值情况,我们对这种设定下的训练集的表示方法如下所示:
- y ( i ) y^{(i)} y(i) 的值取决于对应的图像 x ( i ) x^{(i)} x(i),那么一个训练样本将由一组 的 ( 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),在该例子中,它们都是四维向量,分别代表四种不同的类别。