0%

Part1-神经网络

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)\)

则:image-20210709160020213

\(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]\)