机器学习——神经网络
Posted daizigege
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习——神经网络相关的知识,希望对你有一定的参考价值。
一、神经网络:
1.1非线性假设:
无论是线性回归还是逻辑回归都有这样一个缺点,即:当特征太多时,计算的负荷会非常大。
使用非线性的多项式项,能够帮助我们建立更好的分类模型 ,但与此同时他们的特征组合就有很多。普通的线性模型无法处理,就需要神经网络。
1.2模型表示1
每一个神经元都可以被认为是一个处理单元/神经核(processing unit/Nucleus),它含有许多输入/树突(input/Dendrite),并且有一个输出/轴突(output/Axon).神经网络是大量神经元相互链接并通过电脉冲来交流的一个网络。
每一个神经元又是一个学习模型。这些神经元(也叫激活单元,activation unit)采纳一些特征作为输出,并且根据本身的模型提供一个输出。
神经元图:
神经网络图:
其中:第一层成为输入层(Input Layer),最后一层称为输出层(Output Layer),中间一层成为隐藏层(Hidden Layers) 。
一般我们为每一层都增加一个偏差单位(bias unit)然后每层的一个节点都有自己的权重,这样其实就是等价于一个线性模型:y=kx+b;
(a_i^{(j)}) 代表第j层的第i个激活单元,( heta^{(j)}) 代表从第j层映射到第j+1层时的权重矩阵。
对于
特征矩阵的一行给了神经网络,得到( heta*X=a);
1.3模型表示2
利用向量化的方法会使得计算更方便:(a^{(i)}=g( heta^{(i-1)}a^{(i-1)})) (其中每次计算完,都要在后面加一个(a_0^{(i)}=1),其中(a^{(0)}=x) )
如果是整个训练集的话:(a^{(i)}=g( heta^{(i-1)}a^{(i-1)}) 其中a^{(0)}=X^T) (需要使得每一列是特征)
如果遮住左半部分,其实就是逻辑回归;(别忘了加个(a_0^{(2)}) =1),其实(a^{(2)}) 是更高级的特征,他们是X决定的,这些特征值比x次方厉害很多,也能更好地预测新数据。
1.4多类分类
当我们有不止两种分类时(也就是y=1,2,3...k),输出就是k个维度,是哪一类,哪一个位置就是1,其余全为1.
如(left [ egin{matrix}1 end{matrix} ight])
二、神经网络的学习
2.1代价函数
符号说明:
m:样本个数
(x,y):一组输入输出
L:神经网络层数
(L_l): 每层的神经元个数
(S_L) :最后一层中处理单元的个数
二分类:(S_L=1) ,y=0 or 1代表哪一类;
K 类分类 :(S_L=k) ,(y_i=1) 表示分到第i类;
代价函数:
[
J( heta)=-frac{1}{m}[sum_{i=1}^msum_{k=1}^ky_k^{(i)}log(h_ heta(x^{(i)}))_k+(1-y_k^{(i)})log(1-(h_ heta(x^{(i)}))_k)+frac{lambda}{2m}sum_{l=1}^{L-1}sum_{i=1}^{s_l}sum_{j=1}^{s_{l+1}}( heta_{ji}^{(l)})^2]
]
2.2反向传播算法
2.2.1算法概述:
为了计算代价函数的偏导数(frac{partial}{partial heta_{ij}^{(l)}}J( heta)) ,需要从后面一层一层反向求出各层的误差。
假设:(K=4,S_L=4,L=4;)
那么:(delta^{(4)}=a^{(4)}-y;delta^{(3)}=( heta^{(3)})^Tdelta^{(4)}g'(z^{(3)}),其中g'(z^{(3)})=a^{(3)}*(1-a^{(3)}))
如果不做任何正则化处理,那么(frac{partial}{partial heta_{ij}^{(l)}}J( heta)=a_j^{(l)}delta_i^{l+1})
(l):目前所计算的是第几层;
j:目前计算层中的激活单元的下标,也将是下一层的第j个输入变量的下标
i:代表下一层中误差单元的下标,是收到权重矩阵中的第i行影响的下一层中的误差单元的下标
训练集为矩阵:
(D_{ij}^{(l)}=frac{partial}{partial heta_{ij}^{(l)}}J( heta))就是要计算的偏导数;
2.2.2反向传播的直观理解:
参考网站:
http://galaxy.agh.edu.pl/~vlsi/AI/backp_t_en/backprop.html
2.3梯度检验:
模型较为复杂时,可能存在不易察觉的错误。我们用梯度的数值检验这样的错误。
通过计算( heta)两边很近的代价值构成的直线的斜率来估计该点的梯度值。
如对( heta_1进行检验)
2.4神经网络流程:
我们真正要决定的是隐藏层的层数和每个中间层的单元数。
训练神经网络:
- 参数的随机初始化
- 利用正向传播方法计算所有的 (h_ heta(x))
- 编写计算代价函数(J)的代码
- 利用反向传播方法计算所有偏导数
- 利用数值检验方法检验这些偏导数
- 使用优化算法来最小化代价函数!
以上是关于机器学习——神经网络的主要内容,如果未能解决你的问题,请参考以下文章