【ng公开课笔记05】神经网络

一、非线性假设

当特征数量太多时,如果再用多项式进行预测,项数会非常多(\(n^2/2\))
所以普通的线性回归和逻辑回归将不能很好的解决这类复杂的问题,因此模拟人的大脑,构建了神经网络

二、模型表示

神经元模型:

神经元模型

hθ(x)=g(θTx)=11+e−θTx,我们称这是一个以S型函数作为激励函数的人工神经元
每个神经元都是一个学习模型,它采纳一些特征作为输入,并产生一个输出,θ在神经网络中也叫做权重

神经网络:

image_1bh6jtd9t50b1mov1ra2108h18o19.png-100.5kB

参数:

\(a_i^{(j)}\):第j层的第i个单元

\(\theta^(j)\)第j层映射到第j+1层时的权重矩阵

对于θ矩阵,行数=下一层的单元数,列数=上一行的单元数+1(bias unit)
\(\theta^1\)的尺寸为3*4

前向传播算法:

激活单元和输出单元的表达式

image_1bh6kirs166n1cvt12saa9t1ko7m.png-25.7kB

\(\theta_{32}^{(1)}\)即表示将第一层的第二个单元传导到下一层的第三个单元(即下标的前一个数是下一层的单元位置)。
如果用矩阵表示:
\( X=\begin{bmatrix}x_0\\x_1\\x_2\\x_3\end{bmatrix}\) \(\theta=\begin{bmatrix}\theta_{10}&\cdots\\\vdots&\ddots\\\cdots&\cdots&\theta_{33}\end{bmatrix}\)

\(a=\begin{bmatrix}a_1\\a_2\\a_3\end{bmatrix}\)

我们可以得到\(\theta*X=a\)

模型的向量化表示

\(z^{(2)}=\Theta^{(1)}x\),\(h_\theta(x)=a^{(3)}=g(z^{(3)})\)
这是针对一个训练实例进行的计算,如果对整个训练集进行计算,则需要将训练集特征矩阵进行转置,使同一个实例都在一列上。即:
\(z^{(2)}=\Theta^{(1)}*X^T\)
\(a^{(2)}=g(z^{(2)})\)
神经网络就像是logistic regression,只不过把输入向量[x1-x3]变成了中间层的单元。

三、神经网络的优势

我们可以把\(a_i\)看作是更高级的特征值,他们是由x决定的,因为是梯度下降的,所以a是变化的,并且越来越厉害,这些更高级的特征值比仅仅将x进行幂运算效果要好,能更好的预测数据

四、对特征的直观理解

1.and or not

image.png

2.xor:先将and和not进行组合
即(notx1)and(notx2)构成第二层,再进行一次or得到第三层

image.png

3.多类分类:
识别行人、汽车、卡车、摩托车

image.png

五、反向传播算法

1.几个标记方法:

m组训练数据
\(x^{(1)}, x^{(2)}……x^{(m)}\)
神经网络总的层数L;
第l层的单元数\(s_l\)(不包括偏差单元);
输出层的单元数K。
①对于两类分类问题
y=0或1,只有一个输出单元,hΘ(x)∈R,故\(s_L\)
=1,即K=1 .

②对于多类分类问题
y是一个向量,y∈\(R_K\),hΘ(x)∈\(R_K\),SL=K(K>=3)。

2.逻辑回归的代价函数

3.神经网络的代价函数(多类分类问题)


该式子的含义(个人现阶段理解),共有k个分类,所以对于每一行数据,h(x(i))是一个k维的向量(有个输出结果),Σk 即将每一个结果的代价求和,再将m行数据的代价求和,得出总的代价。正则化的式子:每一层有l个单元,对应每层的theta是一个S(l+1)*S(L)的矩阵

4.反向传播算法
先通过一个例子来看:

即前向传播是通过ai求得zi+1,反向传播是通过δi+1求得δi,系数都是Θij,其中j是前一层对应的单元,i是后一层对应的单元
代价函数:

image.png

误差计算方法:

而代价函数的偏导数为

算法:

六、梯度检验##

当我们对一个复杂模型进行梯度下降算法的时候,可能存在一些不易察觉的错误,导致最终的结果可能不是最优解。
为了避免这样的问题,采用一种叫做梯度的数值检验方法。通过估计梯度值来检验我们计算的导数是否符合要求。

image_1bh6ufmnid8u1rg1o5sga13e213.png-23.9kB
方法是在代价函数上沿着切线方向选择两个非常近的点然后计算两个点的平均值以估计梯度。即对某个特定的\(\theta\),我们计算出\(\theta-\epsilon\)\(\theta+\epsilon\)的代价值,然后求两个代价的平均,用以估计在θ出的代价值。
当θ是一个向量时,我们需要对偏导数进行检验

image_1bh6unph8vrt44fmk5htk81v1g.png-8.6kB

将计算出的偏导数存储在矩阵\(D_{ij}^l\)中。检验时将矩阵展开为向量,同时也将θ展开为向量,我们针对每一个θ都算一个近似的梯度值,将这些值存储在另一个矩阵中,并与D进行比较

image_1bh6usvb2fhm116cbpjnjj5361t.png-94.1kB

七、随机初始化

之前通常将参数初始化为0,但对于神经网络不可行,这会导致第二层所有的激活单元都为相同的值,同理,如果所有参数的值都相同,结果也是一样的。
所以参数的初值要随机产生。

八、总结

使用神经网络的步骤:

  • 网络结构:决定层数和单元数

第一层的单元数即训练集的特征数量

最后一层的单元数是结果的种类数量

如果隐藏层数大于1,确保每个隐藏层的单元个数相同

真正需要决定的就是隐藏层的层数和每个中间层的单元数

  • 训练神经网络:

1.参数的随机初始化

2.利用正向传播算法计算所有的\(h_\theta(x)\)

3.编写计算代价函数J的代码

4.利用反向传播方法计算所有的偏导数

5.利用数值检验方法检验这些偏导数

6.使用优化算法来最小化代价函数

posted @ 2017-06-06 16:07  kingsea0_0  阅读(170)  评论(0编辑  收藏  举报