神经网络介绍 Neural Networks:Representation

为什么引入神经网络

对于某些特征多的问题,即使只考虑最低级的二次项,所要考虑的项数也是众多的,这样的话容易使问题过拟合,而且运算量也急剧增大

所以可以看见,当特征个数n很大时,将高阶多项式包含到特征里会使得特征空间急剧膨胀。所以当特征空间巨大时,通过增加特征来建立非线性分类器不是一个好的选择

实值神经网络和复值神经网络 神经网络支持复数吗_神经网络


模型展示 model representation

通常把单个神经元描述为一个逻辑单元(logistic unit),如下图所示

通常只画出x1,x2,x3,,有必要的时候也会加入结点x0,称为偏置单元(bias unit)或偏置神经元,且x0恒=1,所以加不加x0取决于能否优化运算(可以类比回归问题中往训练集X里面加上一列1来进行向量运算,加快运算速度)

其中theta称为模型的参数(parameter)或权重(weight),是由训练者手动确定初始值的

实值神经网络和复值神经网络 神经网络支持复数吗_神经网络_02

但神经网络其实是一组神经元连接在一起的集合,其中包含了input layer,hidden layer,output layer

实值神经网络和复值神经网络 神经网络支持复数吗_神经网络_03


解释神经网络是如何运行的

activation指的是由一个神经元计算并输出的值

对于矩阵theta_j的维度的推导

实值神经网络和复值神经网络 神经网络支持复数吗_反向传播算法_04


前向传播

实值神经网络和复值神经网络 神经网络支持复数吗_反向传播算法_05

神经网络做的事情很像逻辑回归,但它只有在开始的时候训练的是作为输入变量的x1、x2,、x3,其他时候都是用它自己训练出来的变量a1、a2、a3作为新的特征来训练,而新的特征是受theta所影响的,所以在实际的代码训练模型的过程中,可以通过输入不同的theta得到不同的新特征,从而得到不同的模型训练结果

实值神经网络和复值神经网络 神经网络支持复数吗_反向传播算法_06


神经网络如何利用隐藏层来计算更复杂的特征

例子:非线性分类

目标:拟合y=x1 XNOR x2

实值神经网络和复值神经网络 神经网络支持复数吗_实值神经网络和复值神经网络_07

先通过拟合简单例子y = x1 and x2来说明神经网络是怎么工作的

step1:增加一个bias unit:x0 = +1

step2:通过权重赋值实现and,具体如下:

2_1:先计算theta的维度:s_j+1 * (s_j + 1),即(1 * (2 + 1))=(1 * 3)

注意:其中s_j以及s_j+1都不包含偏置单元

2_2:给theta赋值为[-30, +20, +20]

step3:根据前向传播规则计算假设函数h(x)得出结果

实值神经网络和复值神经网络 神经网络支持复数吗_神经网络_08

第二个简单的例子:or function

实值神经网络和复值神经网络 神经网络支持复数吗_实值神经网络和复值神经网络_09

第三个例子:not

(Not x1)and (Not x2)可以先用德摩根律化简成为not(x1 or x2),再用神经网络解决

实值神经网络和复值神经网络 神经网络支持复数吗_神经网络_10

把以上几个例子结合起来计算刚开始的复杂的例子

实值神经网络和复值神经网络 神经网络支持复数吗_反向传播算法_11

所以可以得出一个结论,神经网络可以通过层数的增加计算复杂的模型,但是难点在于:遇到一个问题的时候如何把一个实际的复杂的问题转化为一个又一个简单的问题?


利用神经网络解决多分类问题

由前面的的逻辑回归的学习可以知道,逻辑回归也可以解决多分类问题,不过逻辑回归解决多分类问题的效率很低,它是通过把多分类问题化为多个两分类问题,再去比较这个标签在那个分类中得到的分数最高。可见,这样的算法在执行的过程中需要经过多次迭代,运算量大,耗费资源多,所以用神经网络来解决这类问题。

但是这一节说到底感觉只是说了下用神经网络来解决这类问题的输出和逻辑回归的不同之处,并没有具体说实现,还是要找代码看看具体是怎么实现的,怎么把多分类回归拆成一个个不同的问题并且体现在神经网络上的。

实值神经网络和复值神经网络 神经网络支持复数吗_实值神经网络和复值神经网络_12


实值神经网络和复值神经网络 神经网络支持复数吗_反向传播算法_13


神经网络学习 Neural Networks:Learning

代价函数 Cost Function

对象:用神经网络解决分类问题

实值神经网络和复值神经网络 神经网络支持复数吗_反向传播算法_14

由上图可知,二元分类和多元分类在得到一个输出结果时,二元分类得到的是一个一维的输出单元,而多元分类得到的是k个k维的输出单元,所以这就导致了两者的代价函数是不一样的。后面的theta不一样是因为二元分类的theta通常是一个只有一行或一列的向量,而多元分类中的theta通常是一个多行多列向量

实值神经网络和复值神经网络 神经网络支持复数吗_神经网络_15


反向传播算法 Backpropagation algorithm

用于找出minJ(theta)的一个算法,即最优化算法

用最简单的只有一个数据的训练集举例

实值神经网络和复值神经网络 神经网络支持复数吗_反向传播算法_16

反向传播算法直观来说就是激活值activation的误差,但是我一定知道我这一层的真实值吗?我这个算法一定是对的?所以误差到底是相对于谁的误差?

是假设的激活值和训练集里面的结果集y_j的误差,所以反向传播算法是用输出值的error去推导出前面各层的激活值的error的

那么反向传播的公式的数学推导到底是怎么样的呢?是怎么推导出来的?感觉看了后面的内容也不是很理解

实值神经网络和复值神经网络 神经网络支持复数吗_多分类_17

具体执行

实值神经网络和复值神经网络 神经网络支持复数吗_实值神经网络和复值神经网络_18


理解反向传播

老师说理解反向传播要先理解正向传播,因为这两个算法比较类似,只是方向相反。但很明显,前向传播是很容易理解的,因为这只是一个简单的矩阵计算

实值神经网络和复值神经网络 神经网络支持复数吗_多分类_19

这张幻灯片感觉说清楚了,前面说的关于微积分的个人感觉理解不了也无所谓,关键是后面的例子理解了就行了。先理解了例子,用例子去反向理解理论或许也是一个不错的选择

实值神经网络和复值神经网络 神经网络支持复数吗_神经网络_20


参数展开 unrolling parameters

其实就是使用reshape函数将矩阵表达式展开为向量表达式


梯度检测 Gradient checking

为什么要进行梯度检测
因为反向传播算法有一个不好的特性,容易产生一些bug,并且当它和梯度下降或其他的一些算法一起工作时,虽然看起来可以正常工作,并且J(theta)在每次迭代中都是减少的,但是到了最后,得到的误差会比没有bug的高出一个数量级,所以就要用这种方法来解决这类问题。
所以老师建议在每次使用神经网络或者其他复杂模型去实现反向传播或梯度下降的时候应该使用梯度检测去避免这种情况的发生

预测某一点的梯度值

其实就是一个简单的数学问题

实值神经网络和复值神经网络 神经网络支持复数吗_实值神经网络和复值神经网络_21

当参数是向量时,其实就是一个求偏导的问题

实值神经网络和复值神经网络 神经网络支持复数吗_神经网络_22

梯度检测具体实现

其实就是用一个算法计算出代价函数关于每个参数的导数或偏导数,之后再把得出来的结果和反向传播得到的结果进行比较,看是不是在误差值内

反向传播算法其实是计算代价函数J(theta)关于所有参数的导数或偏导数的有效方法

实值神经网络和复值神经网络 神经网络支持复数吗_反向传播算法_23

注意事项

实值神经网络和复值神经网络 神经网络支持复数吗_神经网络_24


随机初始化 Random initialization

0初始化起不到任何作用

实值神经网络和复值神经网络 神经网络支持复数吗_实值神经网络和复值神经网络_25

实值神经网络和复值神经网络 神经网络支持复数吗_神经网络_26


组合到一起 Putting it together

训练一个神经网络的步骤

首先根据输入特征、输出结果来确定所选网络架构的input layer和output layer的大小,之后确定hidden layer的层数及大小

实值神经网络和复值神经网络 神经网络支持复数吗_多分类_27

接下去的步骤

实值神经网络和复值神经网络 神经网络支持复数吗_多分类_28


实值神经网络和复值神经网络 神经网络支持复数吗_实值神经网络和复值神经网络_29