机器学习笔记4 - 神经网络
线性回归和逻辑回归都有一个缺点,当特征太多,计算负荷会很大,
引入神经网络
在神经网络中,参数称为权重(weight)
其中$x_1,x_2,x_3$是输入单元,$a_1,a_2,a_3$是中间单元,负责处理数据传递到下一层,最后是输出单元,其用来计算$h_\theta(x)$。
在一个三层网络中,第一层成为输入层( Input Layer),最后一层称为输出层( Output Layer),中间一层成为隐藏层 (Hidden Layers)。我们为每一层都增加一个偏置单元(bias unit),得到如下图:
$a^{(j)}_i$表示第$j$层的第$i$个激活单元。$\theta^{(j)}$代表从第$j$层映射到第$j+1$层时的权重矩阵,比如$\theta^{(1)}$表示从第一层映射到第二层的权重矩阵。该矩阵的大小为:以第$j+1$层的激活单元数量为行数,以第$j$层激活单元数加1为列数的矩阵。例:上图神经网络中$\theta^{(1)}$尺寸为3*4:
对于上图所示的模型,激活单元和输出分别表达为:
前向传播算法:从左向右的算法,(每一个a都是由上一层所有的$x$和每一个$x$所对一个的决定的)
把$x,\theta,a$分别用矩阵表示,我们可以得到$\theta*X=a$:
我们使用向量化的方法来代替循环编码
如下神经网络,我们来计算第二层的值:
上述计算完成后添加$a^{(2)}_0=1$,计算输出值如下:
令$z^{(3)}=\theta^{(2)}a^{(2)}$,则$h_\theta(x)=a^{(3)}=g(z^{(3)})$.
如上是针对一个训练实例的计算,对整个训练集进行计算需要将训练集的特征矩阵进行转置,使得同一个实例的特征都在同一列,即:
$$ z^{(2)}=\theta^{(1)}*X^T $$
$$ a^{(2)}=g(z^{(2)}) $$
如下图,当把神经网络的左半部分遮住,右半部分其实就是以$a_0,a_1,a_2,a_3$,按照逻辑回归的方式输出$h_\theta(x)$。
神经网络其实就是逻辑回归,只是我们把逻辑回归的输入变量变成了中间层,即:
我们可以将$a_0,a_1,a_2,a_3$看成相比于$x_0,x_1,x_2,x_3$更高级的特征值,是$x$的进化,其能更好的预测新数据
特征的直观理解
在神经网络中,原始特征是输入层。
如下通过单层神经元表示逻辑运算,比如逻辑与(AND),逻辑或(OR).
用如下神经网络来表示AND函数
其中$\theta_0=-30,\theta_1=20,\theta_2=20$,输出函数$h_\theta(x)$为$h_\theta(x)=g(-30+20x_1+20x_2)$
已知$g(x)$图像是:
得到真值表:
同理对于OR函数:
整体一样,$\theta$取值不同。
逻辑非(NOT)函数:
XNOR函数(输入的两个值必须一样,均为1或均为0),即
$XNOR=(x_1ANDx_2)OR((NOTx_1)AND(NOTx_2))$
首先得到$(NOTx_1)AND(NOTx_2)$的神经元:
将$AND$神经元与$(NOTx_1)AND(NOTx_2)$的神经元以及$OR$神经元进行组合,
实现了XNOR运算功能的神经网络
神经网络的优势在于可以构造出很多复杂的杉树,得到更加厉害的特征值。