【机器学习笔记】神经网络

神经网络

一、非线性假设

对于之前的线性回归等,一般特征数比较有限,可能只有几个,但是对于神经网络来说,特征数可能有上百万个。比如一副50 * 50的RGB图像,它的像素点有50 * 50 * 3 个,这些都是特征值。因此用线性回归、Logistic回归并不能很好的解决这样的问题,因为特征太多了。
因此采用神经网络,可以很好的应对这些特征很多的特征空间。

二、神经元

以下是一个神经元的基本结构:
【机器学习笔记】神经网络
在这幅图中,神经元带有的sigmoid函数称为“**函数”(指代非线性函数)。
这里Θ\Theta可以称为参数或权重(有时候用w表示)。
也可以在输入多加一个x0x_0,可以称为“偏置单元”。

三、神经网络结构

由一组神经元组成的就是基本的神经网络结构:
【机器学习笔记】神经网络
Layer1称为“输入层”,Layer2称为“隐藏层”(可以理解为,中间既不是输入也不是输出,我们也看不见,就是隐藏在中间的层),Layer3是“输出层”。
其中例如a1(2){a}_{1}^{(2)}称为 “**项” ,**项就是由一个具体的神经元计算并输出的值。
【机器学习笔记】神经网络
g()就是**函数,也可以说是logistic函数(sigmoid函数)。其中x0是偏置单元,图中未画出。
如果第j层有sjs_j个神经元,第j+1层有sj+1s_{j+1}个神sj+1s_{j+1}经元,则Θj\Theta^j的shape将会是
sj+1(sj+1) {s}_{j+1} * (s_{j}+1)
Θj\Theta^j是权重矩阵来控制从第j层到第j+1层的映射。

四、前向传播

前向传播可以用向量计算来实现,把所有输入单元的输入看作一个向量,再乘上权重矩阵得到第一层输出,再传给第二层计算…
【机器学习笔记】神经网络
前向传播的过程依赖于网络结构,上面的例子都是全连接,也就是每一个输入单元都与下一层的神经元相连接。

五、如何利用神经网络计算复杂的非线性函数

想要利用下面三个函数来实现异或
【机器学习笔记】神经网络
1)先实现和
【机器学习笔记】神经网络
2)再实现第二个函数
【机器学习笔记】神经网络
3)第三层输出
【机器学习笔记】神经网络
因此,想要实现更加复杂的非线性函数,都是得到前面层的输出再输入到下一层。

六、如何利用神经网络解决多分类问题

类似于Logistic回归的多分类问题,采用一对多的思想,对于4个类,就训练4个分类器。
【机器学习笔记】神经网络
得到了4个输出,4个输出组成一个向量。例如:
【机器学习笔记】神经网络
神经网络的学习过程:对神经网络输入x(i)x^{(i)},可以得到输出hΘ(x(i))h_{\Theta}(x^{(i)}),网络不断学习使得hΘ(x(i))h_{\Theta}(x^{(i)})约等于y(i)y^{(i)}

七、代价函数

首先是Logistic回归的代价函数:
【机器学习笔记】神经网络注意这里没有对Θ0\Theta_{0}的惩罚,这是约定俗成。
然后是神经网络的代价函数:
【机器学习笔记】神经网络
表示有K个类别。
注意里面有k从1~K的求和,这是把k个输出的代价都加起来,得到总的代价。后面正则化项是对权重矩阵中i,j对应的位置进行求和。

八、代价函数最小化

我们已经知道了代价函数J(Θ\Theta),目标是求出Θ\Theta来最小化J(Θ\Theta)。
因此我们需要计算J(Θ\Theta)和【机器学习笔记】神经网络
前向传播可以计算出每层神经元的**值,然后就需要反向传播来最小化损失函数。
【机器学习笔记】神经网络
【机器学习笔记】神经网络
δj(4)\delta_{j}^{(4)}指的是第j层的第4个神经元的误差。
则相应的,把第4层每个误差放一起看作一个向量:δ(4)\delta^{(4)} = a(4)a^{(4)} - y
同样的计算第2、3层误差:
【机器学习笔记】神经网络
可以发现第3层误差是由第4层计算出来的,第2层的是由第3层计算出来的,所以是反向传播计算误差的过程。(第1层是输入,所以没有误差)
有了误差就可以计算偏导项(用来最小化):
【机器学习笔记】神经网络