1.非线性假设
对于下图中的两类点,如果只考虑两个特性,需要使用非线性的多项式才能很好的建立一个分类模型,如 g ( θ 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 1 x 2 + θ 4 x 1 2 x 2 + . . . ) g(\theta_0+\theta_1x_1+\theta_2x_2+\theta_3x_1x_2+\theta_4x_1^2x_2+...) g(θ0+θ1x1+θ2x2+θ3x1x2+θ4x12x2+...):
但是假如存在成百上千的相关特征,如果希望使用这些特征来构建一个非线性的多项式模型,特征组合后的数量十分惊人。比如将100个特征进行两两组合为 x 1 x 2 、 x 1 x 3 、 . . . 、 x 99 x 100 x_1x_2、x_1x_3、...、x_{99}x_{100} x1x2、x1x3、...、x99x100,也存在近5000个组合,更别提为了获取更多的相关性而采取三三组合等等。
多于多特征的数据,增加特征并不是一个好的选择。以汽车分类为例,汽车图片为50*50像素大小,将每个像素视为一个特征,图中模型通过汽车图片的两个像素点构建模型。但是光靠两个像素点(即两个特征),分类效果肯定很差。如果此时两两特征进行组合构建一个多项式模型,会出现约三百万的特征:
2.神经网络
2.1 模型表示1
下图中整个流程被称为前向传播:
- x 1 、 x 2 、 x 3 x_1、x_2、x_3 x1、x2、x3是输入单元(input units),第一层layer1称为输入层(input layer)
- a 1 、 a 2 、 a 3 a_1、a_2、a_3 a1、a2、a3是中间单元,负责将数据处理并传递给下一层,中间层layer2(可以是多层)称为隐藏层(hidden layers)
- 第三层layer3为输出层(output layer)
- 输出层经过 h θ ( x ) h_\theta(x) hθ(x)(之前的逻辑回归中称为逻辑函数,在神经网络中称为激活函数)处理后输出最终结果(其实在每一层间都使用了激活函数)
- 输入层和隐藏层会增加一个偏差单位(bias unit),相当于 y = w x + b y=wx+b y=wx+b中的 b b b
关于图中的标记如下:
- a i ( j ) a_i^{(j)} ai(j)表示第 j j j层的第i个激活单元
- θ ( j ) \theta^{(j)} θ(j)表示第 j j j层映射到第 j + 1 j+1 j+1层的权重矩阵(权重即之前模型中系数的概念),上图中的 θ ( 1 ) \theta^{(1)} θ(1)的大小为3*4,其中3为第2层的激活单元数,4为第1层的激活单元数加上1
2.2 模型表示2
将上述公式转换为向量表示会更加简便:
-
以第一个式子为例,将其转换为 a 1 ( 2 ) = g ( z 1 ( 2 ) ) a^{(2)}_1=g(z_1^{(2)}) a1(2)=g(z1(2)),其中 z 1 ( 2 ) z_1^{(2)} z1(2)的2表示和第二层相关。以此类推,上述隐藏层单元的计算式子变为:
a 1 ( 2 ) = g ( z 1 ( 2 ) ) a^{(2)}_1=g(z_1^{(2)}) a1(2)=g(z1(2))
a 2 ( 2 ) = g ( z 2 ( 2 ) ) a^{(2)}_2=g(z_2^{(2)}) a2(2)=g(z2(2))
a 3 ( 2 ) = g ( z 3 ( 2 ) ) a^{(2)}_3=g(z_3^{(2)}) a3(2)=g(z3(2))
当 x = [ x 0 , x 1 , x 2 , x 3 ] T , z ( 2 ) = [ z 1 ( 2 ) , z 2 ( 2 ) , z 3 ( 2 ) ] T x=[x_0,x_1,x_2,x_3]^T,z^{(2)}=[z_1^{(2)},z_2^{(2)},z_3^{(2)}]^T x=[x0,x1,x2,x3]T,z(2)=[z1(2),z2(2),z3(2)]T时:
z ( 2 ) = θ ( 1 ) x z^{(2)}=\theta^{(1)}x z(2)=θ(1)x
a ( 2 ) = g ( z ( 2 ) ) a^{(2)}=g(z^{(2)}) a(2)=g(z(2))
将向量展开后如下:
-
隐藏层到输出层的向量表示和前面类似,其中 a 0 ( 2 ) = 1 a^{(2)}_0=1 a0(2)=1:
z ( 3 ) = θ ( 2 ) a ( 2 ) z^{(3)}=\theta^{(2)}a^{(2)} z(3)=θ(2)a(2)
h θ ( x ) = a ( 3 ) = g ( z ( 3 ) ) h_\theta(x)=a^{(3)}=g(z^{(3)}) hθ(x)=a(3)=g(z(3))
- 以上过程全部针对的是训练集中的一个样例,如果需要将整个训练集进行前向传播,则需要将向量 x x x替换为矩阵 X X X
2.3 神经网络和逻辑回归的区别
神经网络和逻辑回归有着许多相似的地方,以隐藏层到输出层为例:在逻辑回归中的 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^{(2)}_1、a^{(2)}_2、a^{(2)}_3 a1(2)、a2(2)、a3(2)。由于 a ( 2 ) a^{(2)} a(2)中的每个值都是经过第一层计算后的值,可以视为更加高级的特征值(相较于 x 1 、 x 2 、 x 3 x_1、x_2、x_3 x1、x2、x3),而不同的 θ ( 1 ) \theta^{(1)} θ(1)可以学习到不同的高级特征
综上,在逻辑回归中只能使用数据中的原始特征,虽然可以使用组合这些特征,但是会依旧会受到原始特征的限制。在神经网络中,原始特征作为输入层,后面不断深入的网络层会使用到前一层的高级特征,并非原始特征
2.4 多分类
在上述网络中,最终输出层只有一个神经元,即只能表示二分类,为了表示多分类的结果,可以在输出层多设置几个神经元,比如当 h θ ( x ) = [ 1 , 0 , 0 , 0 ] T h_\theta(x)=[1,0,0,0]^T hθ(x)=[1,0,0,0]T时表示预测结果为第一类:
3.参考
https://www.bilibili.com/video/BV164411b7dx?p=43-49
http://www.ai-start.com/ml2014/html/week4.html