机器学习(Coursera吴恩达)(四)(神经网络待学)

机器学习(Coursera吴恩达)(四)(神经网络待学)

标签(空格分隔): 机器学习 神经网络 Neural-Network


神经网络(NEURAL NETWORK)

无论是线性回归还是逻辑回归,当特征太多时,计算负荷会非常大。
如果特征非常多时,那么构建仅构建二次项就会有很多种组合,Cn2 种组合。
比如我们有100*100的图片,那么仅灰度就有10000个特征。将其组合的话就无法有效使用逻辑回归处理。
神经网络是用计算机模拟人的大脑,模拟神经元的链接使算法自动学习所有特征。

模型表示

1神经元模型.png-104.8kB

神经网络分为输入层,隐藏层和输出层。是许多逻辑单元按不同层级组织起来的网络,每一层的输出变量都是下一层的输入变量。

2神经网络模型.png-91.9kB

给每一层都类似逻辑回归加入一个偏差单元(bias unit)x0=1,a0(1)=1
* ai(j) 表示第j层的第i个激活单元
* θ(j) 表示从第j层映射到j+1层是的权重矩阵,例如θ(1) 表示第一层到第二层的权重矩阵。其尺寸为:以j+1层激活单元数量为行数,第j层激活单元数+1为列数。例如上图中θ(1) 就是3*4。(θs(j+1)s(j) , x是第j层的为(s(j)+1)1 尺寸,最后输出就是s(j+1)1
对于以上模型,激活单元和输出分别为:

3g_theta_x.png-27kB

这样的算法成为前向传播算法(forward propagation)。

向量化表示

4矩阵表示.png-97kB

4矩阵表示3.png-56.1kB

4矩阵表示2.png-140.8kB

在最后输出层就是类似logistic regression,就是把LR的原始特征x变成了现在的特征a。

我们可以把a一系列看为有x特征得到个更高级别的进化体,并且是由x决定的。因为梯度是下降的所以a是变化的,也就是这个特征变得越来越高效。而且这些特征远比x2 要有用,也能更好的预测。

特征

单纯的逻辑回归中,我们用到的就是获得的原始特征及其多种组合,有时候这样的特征不能完全表现特性,因此需要用其他的方法获得更有用的特征。
神经网络就是这样的方法,我们可以看做第二层的项就是有第一层原始特征通过学习得到的更搞笑的特征集。
神经网络可以解决简单的逻辑回归无法处理的表达。
比如LR可以处理AND、OR、NOT,但是对XOR的复杂程度无法轻易解决,但是NN可以。
首先XOR可以变换表达形式:
5XOR变换表达.png-90.2kB

然后用两个NOT 和AND表示两层了LR,也就组合成了多个lR神经元的神经网络:第一层到第二层为得到特征的NOT,也就是更高级的特征a,然后使用a作为新的特征得到最后的hθ(x)
6XOR.png-141.2kB

多分类

当我们要处理的是多分类的情况。输出神经元就不是一个节点了,要对应多种分类以多个节点输出。每个节点的输出是当前分类的概率。选取最接近1的那个分类作为预测分类。

7多分类.png-147.3kB

神经网络的学习

代价函数???

  • m表示样本个数,每个样本包含一组输入x和一组输出y
  • L表示神经网络层数
  • SI 表示每层的神经元个数,Sl 表示输出层神经元个数
  • SL 表示最后一层中处理单元的个数。

将神经网络分类问题分为:二分类和多分类。
二分类:SL=0,y=0or1 表示哪一类;
多分类:SL=k,yi=1 表示分在哪一类。

逻辑回归中输出只有一个标量,称为标量。但是在神经网络中,假设函数有K个输出因此hθ(x)RK,(hθ(x))i=ithoutput
代价函数$J(\Theta)=-\frac{1}{m}[\sum_{i=1}^m \sum_{k=1}^ky_k^{(i)}log(h_\Theta(x^{(i)}))k+(1-y_k^{(i)})log(1-h\Theta(x^{(i)}))_k)] \
+ \frac{\lambda}{2m}\sum_{l=1}^{L-1}\sum_{i=1}^{s_l}\sum_{j=1}^{s_l+1}(\Theta_{ji}^{(l)})^2$

这个式子是把k个LR的误差进行累加,对每一个分别计算代价函数,再通过累加写为一个函数。每一层都是对这一层的。对每行特征都有K个不同的结果,然后利用循环在K个预测中选择可能性最高的一个,将其与y中的实际数据进行比较。
正则化的那一项只是排除了每一层θ0 之后,每一层的θ 矩阵的和。最里层的循环j循环所有的行(由sl+1 层的激活单元数决定),循环i则循环所有的列,由改成(sl 层)的激活单元数所决定。即:hθ(x) 与真实值之间的距离为每个样本-每个类输出的加和,对参数进行regularization的bias项处理所有参数的平方和。

BP传播算法

为了计算代价函数的偏导数Θij(l)J(Θ) 。需要用反向传播算法。也就是首先计算最后一层的误差,然后再一层一层反向求出各层的误差,直到倒数第二层。

一个例子:

1例子.png-290.7kB

1、 我们从最后一层开始计算误差,用δ 表示误差:δ(4)=a(4)y
2、 利用这个误差计算前一层的误差:

δ(3)=(Θ(3))Tδ(4)g(z(3))
其中g(z(3)) 是sigmoid函数的导数,g(z(3))=a(3)(1a(3)) 。而(θ(3))Tδ(4) 则是权重导致的误差的和。
3、 计算第二层的误差:
δ(2)=(Θ(2))Tδ(3)g(z(2))

我们就有了所有误差的表达式后,便可以计算代价函数的偏导数了,假设λ=0 ,有:
Θij(i)J(Θ)=aj(l)δl(l+1)
  • l表示目前计算的第几行
  • j表示目前计算的层中激活单元的下标,也将是下一层的第j个输入变量的下标
  • i表示下一层中误差单元的下标,是受到权重矩阵中第i行影响的下一层中的误差单元的下标。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章