8 神经网络:表述(Neural Networks: Representation)
8.1 非线性假设(Non-linear hypothe)
线性回归和逻辑回归算法当特征太多时,计算的负荷会非常大。这时需要神经网络。
8.2 神经元和大脑(Neurons and brain)
神经网络是一种很古老的算法,它最初产生的目的是制造能模拟大脑的机器。神经网络逐渐兴起于二十世纪八九十年代,应用得非常广泛。但由于各种原因,在90年代的后期应用减少了。但是最近,神经网络又东山再起了。其中一个原因是:神经网络是计算量有些偏大的算法。由于近些年计算机的运行速度变快,才足以真正运行起大规模的神经网络。
8.3 模型表示1(Model representation I)
大脑中的神经网络的每一个神经元都可以被认为是一个处理单元/神经核(processing unit/Nucleus),它含有许多输入/树突(input/Dendrite),并且有一个输出/轴突(output/Axon)。神经网络是大量神经元相互链接并通过电脉冲来交流的一个网络。
神经网络模型建立在很多神经元之上,每一个神经元又是一个个学习模型。这些神经元(也叫激活单元,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
j+1
j+1 层时的权重的矩阵。其尺寸为:以第
j
+
1
j+1
j+1层的激活单元数量为行数,以第
j
j
j 层的激活单元数加一为列数的矩阵。
每一个 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 。
8.4 模型表示2(Model representation II)
相对于使用循环来编码,利用向量化的方法会使得计算更为简便。对整个训练集进行计算,需要将训练集特征矩阵进行转置,使得同一个实例的特征都在同一列里。即:
z ( 2 ) = Θ ( 1 ) × X T {{z}^{\left( 2 \right)}}={{\Theta }^{\left( 1 \right)}}\times {{X}^{T}} z(2)=Θ(1)×XT
a ( 2 ) = g ( z ( 2 ) ) {{a}^{\left( 2 \right)}}=g({{z}^{\left( 2 \right)}}) a(2)=g(z(2))
神经网络就像是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次方厉害,也能更好的预测新数据。这就是神经网络相比于逻辑回归和线性回归的优势。
8.5 例子和直观理解1(Examples and intuitions I)
从本质上讲,神经网络能够通过学习得出其自身的一系列特征。神经网络中,原始特征只是输入层,输出层做出的预测利用的是上一层的特征,而非输入层中的原始特征,可以认为隐藏层中的特征是神经网络通过学习后自己得出的一系列用于预测输出变量的新特征。
神经网络中,单层神经元(无中间层)的计算可用来表示逻辑运算,比如逻辑与(AND)、逻辑或(OR)。
8.6 例子和直观理解II(Examples and Intuitions II)
二元逻辑运算符(BINARY LOGICAL OPERATORS)当输入特征为布尔值(0或1)时,可以用一个单一的激活层可以作为二元逻辑运算符,为了表示不同的运算符,我们只需要选择不同的权重即可。可以利用神经元来组合成更为复杂的神经网络以实现更复杂的运算。
例如XNOR 功能(输入的两个值必须一样,均为1或均为0),即
XNOR
=
(
x
1
AND
x
2
)
OR
(
(
NOT
x
1
)
AND
(
NOT
x
2
)
)
\text{XNOR}=( \text{x}_1\, \text{AND}\, \text{x}_2 )\, \text{OR} \left( \left( \text{NOT}\, \text{x}_1 \right) \text{AND} \left( \text{NOT}\, \text{x}_2 \right) \right)
XNOR=(x1ANDx2)OR((NOTx1)AND(NOTx2))