http://www.ai-start.com/ml2014/html/week4.html
神经网络:表述(Neural Networks: Representation)
非线性假设
假使我们采用的都是50x50像素的小图片,并且我们将所有的像素视为特征,则会有 2500个特征,如果我们要进一步将两两特征组合构成一个多项式模型,则会有约
2500
2
/
2
{{2500}^{2}}/2
25002/2个(接近3百万个)特征。普通的逻辑回归模型,不能有效地处理这么多的特征,这时候我们需要神经网络。
当数据的特征太多,比如图像识别,一般就不能使用逻辑回归进行分类,而要使用神经网络。
模型表示1
神经网络模型建立在很多神经元之上,每一个神经元又是一个个学习模型。这些神经元(也叫**单元,activation unit)采纳一些特征作为输出,并且根据本身的模型提供一个输出。下图是一个以逻辑回归模型作为自身学习模型的神经元示例,在神经网络中,参数又可被成为权重(weight)。
我们设计出了类似于神经元的神经网络,效果如下:
其中
x
1
x_1
x1,
x
2
x_2
x2,
x
3
x_3
x3是输入单元(input units),我们将原始数据输入给它们。
a
1
a_1
a1,
a
2
a_2
a2,
a
3
a_3
a3是中间单元,它们负责将数据进行处理,然后呈递到下一层。 最后是输出单元,它负责计算
h
θ
(
x
)
{h_\theta}\left( x \right)
hθ(x)。
神经网络模型是许多逻辑单元按照不同层级组织起来的网络,每一层的输出变量都是下一层的输入变量。下图为一个3层的神经网络,第一层成为输入层(Input Layer),最后一层称为输出层(Output Layer),中间一层成为隐藏层(Hidden Layers)。我们为每一层都增加一个偏差单位(bias unit):
下面引入一些标记法来帮助描述模型:
a
i
(
j
)
a_{i}^{\left( j \right)}
ai(j) 代表第
j
j
j 层的第
i
i
i 个**单元。
θ
(
j
)
{{\theta }^{\left( j \right)}}
θ(j)代表从第
j
j
j 层映射到第$ j+1$ 层时的权重的矩阵,例如
θ
(
1
)
{{\theta }^{\left( 1 \right)}}
θ(1)代表从第一层映射到第二层的权重的矩阵。其尺寸为:以第
j
+
1
j+1
j+1层的**单元数量为行数,以第
j
j
j 层的**单元数加一为列数的矩阵。例如:上图所示的神经网络中
θ
(
1
)
{{\theta }^{\left( 1 \right)}}
θ(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 ) = g ( Θ 10 ( 2 ) a 0 ( 2 ) + Θ 11 ( 2 ) a 1 ( 2 ) + Θ 12 ( 2 ) a 2 ( 2 ) + Θ 13 ( 2 ) a 3 ( 2 ) ) {{h}_{\Theta }}(x)=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)=g(Θ10(2)a0(2)+Θ11(2)a1(2)+Θ12(2)a2(2)+Θ13(2)a3(2))
上面进行的讨论中只是将特征矩阵中的一行(一个训练实例)喂给了神经网络,我们需要将整个训练集都喂给我们的神经网络算法来学习模型。
我们可以知道:每一个 a a a都是由上一层所有的 x x x和每一个 x x x所对应的决定的。
(我们把这样从左到右的算法称为前向传播算法( FORWARD PROPAGATION ))
把
x
x
x,
θ
\theta
θ,
a
a
a 分别用矩阵表示:
我们可以得到
θ
⋅
X
=
a
\theta \cdot X=a
θ⋅X=a 。
模型表示2
( FORWARD PROPAGATION ) 相对于使用循环来编码,利用向量化的方法会使得计算更为简便。以上面的神经网络为例,试着计算第二层的值:
我们令
z
(
2
)
=
θ
(
1
)
x
{{z}^{\left( 2 \right)}}={{\theta }^{\left( 1 \right)}}x
z(2)=θ(1)x,则
a
(
2
)
=
g
(
z
(
2
)
)
{{a}^{\left( 2 \right)}}=g({{z}^{\left( 2 \right)}})
a(2)=g(z(2)) ,计算后添加
a
0
(
2
)
=
1
a_{0}^{\left( 2 \right)}=1
a0(2)=1。 计算输出的值为:
我们令
z
(
3
)
=
θ
(
2
)
a
(
2
)
{{z}^{\left( 3 \right)}}={{\theta }^{\left( 2 \right)}}{{a}^{\left( 2 \right)}}
z(3)=θ(2)a(2),则
h
θ
(
x
)
=
a
(
3
)
=
g
(
z
(
3
)
)
h_\theta(x)={{a}^{\left( 3 \right)}}=g({{z}^{\left( 3 \right)}})
hθ(x)=a(3)=g(z(3))。 这只是针对训练集中一个训练实例所进行的计算。如果我们要对整个训练集进行计算,我们需要将训练集特征矩阵进行转置,使得同一个实例的特征都在同一列里。即: ${{z}^{\left( 2 \right)}}={{\Theta }^{\left( 1 \right)}}\times {{X}^{T}} $
a ( 2 ) = g ( z ( 2 ) ) {{a}^{\left( 2 \right)}}=g({{z}^{\left( 2 \right)}}) a(2)=g(z(2))
为了更好了了解Neuron Networks的工作原理,我们先把左半部分遮住:
右半部分其实就是以
a
0
,
a
1
,
a
2
,
a
3
a_0, a_1, a_2, a_3
a0,a1,a2,a3, 按照Logistic Regression的方式输出
h
θ
(
x
)
h_\theta(x)
hθ(x):
其实神经网络就像是logistic regression,只不过我们把logistic regression中的输入向量
[
x
1
∼
x
3
]
\left[ x_1\sim {x_3} \right]
[x1∼x3] 变成了中间层的
[
a
1
(
2
)
∼
a
3
(
2
)
]
\left[ a_1^{(2)}\sim a_3^{(2)} \right]
[a1(2)∼a3(2)], 即:
h
θ
(
x
)
=
g
(
Θ
0
(
2
)
a
0
(
2
)
+
Θ
1
(
2
)
a
1
(
2
)
+
Θ
2
(
2
)
a
2
(
2
)
+
Θ
3
(
2
)
a
3
(
2
)
)
h_\theta(x)=g\left( \Theta_0^{\left( 2 \right)}a_0^{\left( 2 \right)}+\Theta_1^{\left( 2 \right)}a_1^{\left( 2 \right)}+\Theta_{2}^{\left( 2 \right)}a_{2}^{\left( 2 \right)}+\Theta_{3}^{\left( 2 \right)}a_{3}^{\left( 2 \right)} \right)
hθ(x)=g(Θ0(2)a0(2)+Θ1(2)a1(2)+Θ2(2)a2(2)+Θ3(2)a3(2)) 我们可以把
a
0
,
a
1
,
a
2
,
a
3
a_0, a_1, a_2, a_3
a0,a1,a2,a3看成更为高级的特征值,也就是
x
0
,
x
1
,
x
2
,
x
3
x_0, x_1, x_2, x_3
x0,x1,x2,x3的进化体,并且它们是由
x
x
x与
θ
\theta
θ决定的,因为是梯度下降的,所以
a
a
a是变化的,并且变得越来越厉害,所以这些更高级的特征值远比仅仅将
x
x
x次方厉害,也能更好的预测新数据。 这就是神经网络相比于逻辑回归和线性回归的优势。
样本和直观理解1
从本质上讲,神经网络能够通过学习得出其自身的一系列特征。在普通的逻辑回归中,我们被限制为使用数据中的原始特征 x 1 , x 2 , . . . , x n x_1,x_2,...,{{x}_{n}} x1,x2,...,xn,我们虽然可以使用一些二项式项来组合这些特征,但是我们仍然受到这些原始特征的限制。在神经网络中,原始特征只是输入层,在我们上面三层的神经网络例子中,第三层也就是输出层做出的预测利用的是第二层的特征,而非输入层中的原始特征,我们可以认为第二层中的特征是神经网络通过学习后自己得出的一系列用于预测输出变量的新特征。
神经网络中,单层神经元(无中间层)的计算可用来表示逻辑运算,比如逻辑与(AND)、逻辑或(OR)。
举例说明:逻辑与(AND);下图中左半部分是神经网络的设计与output层表达式,右边上部分是sigmod函数,下半部分是真值表。
我们可以用这样的一个神经网络表示AND 函数:
其中
θ
0
=
−
30
,
θ
1
=
20
,
θ
2
=
20
\theta_0 = -30, \theta_1 = 20, \theta_2 = 20
θ0=−30,θ1=20,θ2=20 我们的输出函数
h
θ
(
x
)
h_\theta(x)
hθ(x)即为:
h
Θ
(
x
)
=
g
(
−
30
+
20
x
1
+
20
x
2
)
h_\Theta(x)=g\left( -30+20x_1+20x_2 \right)
hΘ(x)=g(−30+20x1+20x2)
我们知道
g
(
x
)
g(x)
g(x)的图像是:
所以我们有:
h
Θ
(
x
)
≈
x
1
AND
,
x
2
h_\Theta(x) \approx \text{x}_1 \text{AND} , \text{x}_2
hΘ(x)≈x1AND,x2
所以我们的:$h_\Theta(x) $
这就是AND函数。
接下来再介绍一个OR函数:
OR与AND整体一样,区别只在于的取值不同。
多类分类
使用多层神经网络进行分类。