Part1-神经网络
非线性假设
既然我们已经学习了线性回归和逻辑回归,那么为什么还需要学习神经网络?
例:
如图,对于一个非线性分类问题,当特征数量较多,如达到100个时,对应的特征映射:
只考虑二次项有:\(x_1^2,x_1x_2,x_1x_3,x_1x_4,\cdots,x_1x_{100},x_2^2,x_2x_3,\cdots\),就有大约5000个特征,大约以\(n^2\)量级增长,即\(O(n^2)\)
也可以考虑上述二次项的子集如:\(x_1^2,x_2^2,\cdots,x_{100}^2\),这样数量会减少到只有100个二次项,但由于忽略了太多相关项,在处理类似例中数据时,无法得到理想的结果
再假设,如果考虑三次项则有:\(x_1x_2x_3,x_1^2x_2,\cdots\),则会更多,约170000个,对应\(O(n^3)\)
因此,当初始特征个数n很大时,将这些高阶多项式项数包括到特征里人会使特征空间急剧膨胀,当n很大时,增加特征来建立非线性分类器并不是一个好做法。
神经元和大脑
神经网络是一个比较老的算法了,它最初产生的目的是制造能模拟大脑的机器
但实际上,神经网络能很好地解决不同的机器学习问题。
神经网络
起源:是人们想尝试设计出模仿大脑的算法
理念:如果我们想建立学习系统,那为什么不去模仿我们所认识的最神奇的学习机器,人类的大脑呢?
神经网络逐渐兴起于二十世纪八九十年代,应用得非常广泛,但由于各种原因,在九十年代后期应用减少了,但近年,神经网络又变火了,原因之一就是神经网络的计算量较大,到了近些年,计算机的运行速度越来越快,才足以运行大规模的神经网络。
”一次学习算法“假设
假设大脑所做的学会去处理图像、学会听声音、学习数学等并不是用上千个不同的程序去实习的,而是只需要一个学习算法就可以了。
模型展示
如图,是大脑中的神经元
其中,有很多的输入通道,叫做树突,有一条输出通道,叫做轴突。
神经元是一个计算单元,它从输入通道接受一定数目的信息,并做一些计算,然后将结果通过轴突传送到其它节点。
神经元模型:逻辑单元
\[
x = \left[ \begin{matrix} x_0\\ x_1\\ x_2\\ x_3 \end{matrix} \right]\ \
\theta = \left[ \begin{matrix} \theta_0\\ \theta_1\\ \theta_2\\ \theta_3 \end{matrix} \right]\\
h_\theta(x)=\frac{1}{1+e^{-\theta^Tx}}
\] 图中未画出的\(x_0\)节点通常被称作偏置单元或偏置神经元
对应的橙色部分,被称为激活函数,\(g(z)=\frac{1}{1+e^{-z}}\)
在神经网络中术语中,激活函数是指代非线性函数
此外,我们一起称\(\theta\)为模型的参数,但在一些关于神经网络的文献中,有时会称之为模型的权重(weights)
神经网络
上述代表的是单个神经元,而神经网络其实就是一组神经元连接在一起的集合,如图:
具体的计算步骤:
符号解释:
\(a_i^{(j)}\):第\(j\)层第\(i\)个单元的激活项
\(\theta^{(j)}\):控制从第\(j\)层到第\(j+1\)层函数映射的权重矩阵
如图,对应的计算方法:
\(a_1^{(2)}=g(\Theta_{10}^{(1)}x_0+\Theta_{11}^{(1)}x_1+\Theta_{12}^{(1)}x_2+\Theta_{13}^{(1)}x_3)\)
\(a_2^{(2)}=g(\Theta_{20}^{(1)}x_0+\Theta_{21}^{(1)}x_1+\Theta_{22}^{(1)}x_2+\Theta_{23}^{(1)}x_3)\)
\(a_3^{(2)}=g(\Theta_{30}^{(1)}x_0+\Theta_{31}^{(1)}x_1+\Theta_{32}^{(1)}x_2+\Theta_{33}^{(1)}x_3)\)
\(h_\Theta(x)=a_1^{(3)}=g(\Theta_{10}^{(2)}a_0^{(2)}+\Theta_{11}^{(2)}a_1^{(2)}+\Theta_{12}^{(2)}a_2^{(2)}+\Theta_{13}^{(2)}a_3^{(2)})\)
如果一个网络在第\(j\)层有\(s_j\)个单元,在\(j+1\)有\(s_{j+1}\)个单元,则矩阵\(\Theta^{(j)}\)即控制第\(j\)层到第\(j+1\)层映射的矩阵,它的维度是\(s_{j+1}\times (s_j+1)\)
前向传播:向量化实现
$x= z^{(2)}=$
\(z^{(2)}=\Theta^{(1)}x\)
\(a^{(2)}=g(z^{(2)})\) ( \(a^{(2)}\)是一个三维向量;\(z^{(2)}\)也是一个三维向量)
加上 \(a_0^{(2)}=1\), (\(a^{(2)}\)是四维向量)
\(z^{(3)}=\Theta^{(2)}a^{(2)}\)
\(h_\Theta(x)=a^{(3)}=g(z^{(3)})\)
神经网络学习它自己的特征
如图,这看起来非常像标准的逻辑回归模型,但输入的逻辑回归的特征是通过隐藏层计算这些数值,即这个神经网络所做的事就像是逻辑回归,但它不是使用原本的\(x_1,x_2,x_3\)作为特征,而是用\(a_1,a_2,a_3\)作为新的特征:
然后,特征项\(a_1,a_2,a_3\)是学习得到的函数输入值,具体来说,就是从第一层映射到第二层的函数,这个函数由其它参数\(\Theta^{(1)}\)决定
其它网络框架
例:
例子与直觉理解
例:
如图,\(x_1,x_2\)是十分类(0 或 1),将右边图对应进行简化,可看作是左边的图,以便说明问题
具体地,我们需要计算目标函数
\(y=x_1\ XOR\ x_2\)(异或)
或\(y=x_1 \ XNOR\ x_2\)(\(XNOR:NOT(x_1\ XOR\ x_2)\)) (异或非)
那么,我们能否构建一个神经网络,来拟合这样一个异或运算呢?
先从简单的入手:
假设有两个二进制输入\(x_1,x_2 \in \{0,1\}\)
\(y = x_1 \ AND\ x_2\)
则可以构建如图的神经网络进行实现:
假设\(\Theta_{10}^{(1)}=-30,\Theta_{11}^{(1)}=20,\Theta_{12}^{(1)}=20\)
\(h_\Theta(x)=g(-30+20x_1+20x_2)\)
则:
\(h_\Theta(x) \approx x_1\ AND\ x_2\)
例:
假设有两个二进制输入\(x_1,x_2 \in \{0,1\}\)
\(y = x_1 \ OR\ x_2\)
假设\(\Theta_{10}^{(1)}=-10,\Theta_{11}^{(1)}=20,\Theta_{12}^{(1)}=20\)
\(h_\Theta(x)=g(-10+20x_1+20x_2)\)
则:
\(h_\Theta(x) \approx x_1\ OR\ x_2\)
例:
假设有两个二进制输入\(x_1,x_2 \in \{0,1\}\)
\(y = NOT\ x_1\)
假设\(\Theta_{10}^{(1)}=10,\Theta_{11}^{(1)}=-20\)
\(h_\Theta(x)=g(10-20x_1)\)
则:
\(h_\Theta(x) \approx NOT\ x_1\)
例:
假设有两个二进制输入\(x_1,x_2 \in \{0,1\}\)
\(y = x_1\ XNOR\ x_2\)
\(h_\Theta(x) \approx x_1\ XNOR\ x_2\)$
多分类
在神经网络中实现多分类的方法,本质上就是一对多的拓展
假设有一个图片分类,需要对图片进行四分类如:行人、汽车、摩托车、货车
构建一个有四个输出单元的神经网络:\(h_\Theta(x) \in \R^4\)
则对于行人,输出\(h_\Theta(x) = \left[ \begin{matrix} 1\\ 0\\ 0\\ 0 \end{matrix} \right]\);
对于汽车,输出\(h_\Theta(x) = \left[ \begin{matrix} 0\\ 1\\ 0\\ 0 \end{matrix} \right]\)
以此类推
换句话说,对于神经网络中的多分类而言:
训练集:\((x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),\cdots,(x^{(m)},y^{(m)})\)
\(y^{(i)}\)是以下四个中的一个:
\(\left[ \begin{matrix} 1\\ 0\\ 0\\ 0 \end{matrix} \right]\),\(\left[ \begin{matrix} 0\\ 1\\ 0\\ 0 \end{matrix} \right]\),\(\left[ \begin{matrix} 0\\ 0\\ 1\\ 0 \end{matrix} \right]\),\(\left[ \begin{matrix} 0\\ 0\\ 0\\ 1 \end{matrix} \right]\)