机器学习笔记(吴恩达)——神经网络:表述

模型表示1

神经网络模型建立在很多神经元之上,每一个神经元又是一个个学习模型。这些神经元(也叫**单元,activation unit)采纳一些特征作为输出,并且根据本身的模型提供一个输出。下图是一个以逻辑回归模型作为自身学习模型的神经元示例,在神经网络中,参数又可被成为权重(weight)
机器学习笔记(吴恩达)——神经网络:表述
其中x1x_1, x2x_2, x3x_3是输入单元(input units),我们将原始数据输入给它们。 a1a_1, a2a_2, a3a_3是中间单元,它们负责将数据进行处理,然后呈递到下一层。 最后是输出单元,它负责计算hθ(x){h_\theta}\left( x \right)
其中每一层根据具体问题需求,会设置加入x0x_0
神经网络模型是许多逻辑单元按照不同层级组织起来的网络,每一层的输出变量都是下一层的输入变量。下图为一个3层的神经网络,第一层成为输入层(Input Layer),最后一层称为输出层(Output Layer),中间一层成为隐藏层(Hidden Layers)。我们为每一层都增加一个偏差单位(bias unit):
机器学习笔记(吴恩达)——神经网络:表述
下面引入一些标记法来帮助描述模型: ai(j)a_{i}^{\left( j \right)} 代表第jj 层的第 ii 个**单元。θ(j){{\theta }^{\left( j \right)}}代表从第 jj 层映射到第$ j+1$ 层时的权重的矩阵,例如θ(1){{\theta }^{\left( 1 \right)}}代表从第一层映射到第二层的权重的矩阵。其尺寸为:以第 j+1j+1层的**单元数量为行数,以第 jj 层的**单元数加一为列数的矩阵。例如:上图所示的神经网络中θ(1){{\theta }^{\left( 1 \right)}}的尺寸为 3*4。

对于上图所示的模型,**单元和输出分别表达为:

a1(2)=g(Θ10(1)x0+Θ11(1)x1+Θ12(1)x2+Θ13(1)x3)a_{1}^{(2)}=g(\Theta {10}^{(1)}{{x}{0}}+\Theta {11}^{(1)}{{x}{1}}+\Theta {12}^{(1)}{{x}{2}}+\Theta {13}^{(1)}{{x}{3}})
a2(2)=g(Θ20(1)x0+Θ21(1)x1+Θ22(1)x2+Θ23(1)x3)a_{2}^{(2)}=g(\Theta {20}^{(1)}{{x}{0}}+\Theta {21}^{(1)}{{x}{1}}+\Theta {22}^{(1)}{{x}{2}}+\Theta {23}^{(1)}{{x}{3}})
a3(2)=g(Θ30(1)x0+Θ31(1)x1+Θ32(1)x2+Θ33(1)x3)a_{3}^{(2)}=g(\Theta {30}^{(1)}{{x}{0}}+\Theta {31}^{(1)}{{x}{1}}+\Theta {32}^{(1)}{{x}{2}}+\Theta {33}^{(1)}{{x}{3}}) hΘ(x)=g(Θ10(2)a0(2)+Θ11(2)a1(2)+Θ12(2)a2(2)+Θ13(2)a3(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)})
上面进行的讨论中只是将特征矩阵中的一行(一个训练实例)喂给了神经网络,我们需要将整个训练集都喂给我们的神经网络算法来学习模型。

我们可以知道:每一个aa都是由上一层所有的xx和每一个xx所对应的决定的。

(我们把这样从左到右的算法称为前向传播算法( FORWARD PROPAGATION ))

xx, θ\theta, aa 分别用矩阵表示:
机器学习笔记(吴恩达)——神经网络:表述
我们可以得到θX=a\theta \cdot X=a

模型表示2

机器学习笔记(吴恩达)——神经网络:表述

我们令 z(2)=θ(1)x{{z}^{\left( 2 \right)}}={{\theta }^{\left( 1 \right)}}x,则 a(2)=g(z(2)){{a}^{\left( 2 \right)}}=g({{z}^{\left( 2 \right)}}) ,计算后添加 a0(2)=1a_{0}^{\left( 2 \right)}=1。 计算输出的值为:
机器学习笔记(吴恩达)——神经网络:表述
我们令 z(3)=θ(2)a(2){{z}^{\left( 3 \right)}}={{\theta }^{\left( 2 \right)}}{{a}^{\left( 2 \right)}},则 hθ(x)=a(3)=g(z(3))h_\theta(x)={{a}^{\left( 3 \right)}}=g({{z}^{\left( 3 \right)}})。 这只是针对训练集中一个训练实例所进行的计算。如果我们要对整个训练集进行计算,我们需要将训练集特征矩阵进行转置,使得同一个实例的特征都在同一列里。即:
z(2)=Θ(1)×XT{{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)}})

为了更好了了解Neuron Networks的工作原理,我们先把左半部分遮住:
机器学习笔记(吴恩达)——神经网络:表述
右半部分其实就是以a0,a1,a2,a3a_0, a_1, a_2, a_3, 按照Logistic Regression的方式输出hθ(x)h_\theta(x)
机器学习笔记(吴恩达)——神经网络:表述
其实神经网络就像是logistic regression,只不过我们把logistic regression中的输入向量[x1x3]\left[ x_1\sim {x_3} \right] 变成了中间层的[a1(2)a3(2)]\left[ a_1^{(2)}\sim a_3^{(2)} \right], 即:
hθ(x)=g(Θ0(2)a0(2)+Θ1(2)a1(2)+Θ2(2)a2(2)+Θ3(2)a3(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)
我们可以把a0,a1,a2,a3a_0, a_1, a_2, a_3看成更为高级的特征值,也就是x0,x1,x2,x3x_0, x_1, x_2, x_3的进化体,并且它们是由 xxθ\theta决定的,因为是梯度下降的,所以aa是变化的,并且变得越来越厉害,所以这些更高级的特征值远比仅仅将 xx次方厉害,也能更好的预测新数据。 这就是神经网络相比于逻辑回归和线性回归的优势。

特征和直观理解1

神经网络中,单层神经元(无中间层)的计算可用来表示逻辑运算,比如逻辑与(AND)、逻辑或(OR)。

举例说明:逻辑与(AND);下图中左半部分是神经网络的设计与output层表达式,右边上部分是sigmod函数,下半部分是真值表。

我们可以用这样的一个神经网络表示AND 函数:
机器学习笔记(吴恩达)——神经网络:表述
其中θ0=30,θ1=20,θ2=20\theta_0 = -30, \theta_1 = 20, \theta_2 = 20 我们的输出函数hθ(x)h_\theta(x)即为:hΘ(x)=g(30+20x1+20x2)h_\Theta(x)=g\left( -30+20x_1+20x_2 \right)

我们知道g(x)g(x)的图像是:
机器学习笔记(吴恩达)——神经网络:表述
所以我们有:hΘ(x)x1ANDx2h_\Theta(x) \approx \text{x}_1 \text{AND} \text{x}_2

所以我们的:hΘ(x)h_\Theta(x)

这就是AND函数。

OR函数:
机器学习笔记(吴恩达)——神经网络:表述

特征与直观理解2

二元逻辑运算符(BINARY LOGICAL OPERATORS)当输入特征为布尔值(0或1)时,我们可以用一个单一的**层可以作为二元逻辑运算符,为了表示不同的运算符,我们只需要选择不同的权重即可。

下图的神经元(三个权重分别为-30,20,20)可以被视为作用同于逻辑与(AND):

机器学习笔记(吴恩达)——神经网络:表述

下图的神经元(三个权重分别为-10,20,20)可以被视为作用等同于逻辑或(OR):
机器学习笔记(吴恩达)——神经网络:表述
下图的神经元(两个权重分别为 10,-20)可以被视为作用等同于逻辑非(NOT):
机器学习笔记(吴恩达)——神经网络:表述
我们可以利用神经元来组合成更为复杂的神经网络以实现更复杂的运算。例如我们要实现XNOR 功能(输入的两个值必须一样,均为1或均为0),即 XNOR=(x1,AND,x2),OR((NOT,x1)AND(NOT,x2))\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)​ 首先构造一个能表达(NOT,x1)AND(NOT,x2)\left( \text{NOT}, \text{x}_1 \right) \text{AND} \left( \text{NOT}, \text{x}_2 \right)​部分的神经元
机器学习笔记(吴恩达)——神经网络:表述

多类分类

当我们有不止两种分类时(也就是y=1,2,3.y=1,2,3….),比如以下这种情况,该怎么办?如果我们要训练一个神经网络算法来识别路人、汽车、摩托车和卡车,在输出层我们应该有4个值。例如,第一个值为1或0用于预测是否是行人,第二个值用于判断是否为汽车。

输入向量xx有三个维度,两个中间层,输出层4个神经元分别用来表示4类,也就是每一个数据在输出层都会出现[a b c d]T{{\left[ a\text{ }b\text{ }c\text{ }d \right]}^{T}},且a,b,c,da,b,c,d中仅有一个为1,表示当前类。下面是该神经网络的可能结构示例:
机器学习笔记(吴恩达)——神经网络:表述
机器学习笔记(吴恩达)——神经网络:表述
神经网络算法的输出结果为四种可能情形之一:
机器学习笔记(吴恩达)——神经网络:表述