神经网络就相当于一个黑盒子,可以通过构建这个盒子,实现语言识别、视频描述、游戏决策。
起源:联结主义。
信息储存在神经元与神经元的连接中。
¥
支付方式
请使用微信扫一扫 扫描二维码支付
请使用支付宝扫一扫 扫描二维码支付
神经网络就相当于一个黑盒子,可以通过构建这个盒子,实现语言识别、视频描述、游戏决策。
起源:联结主义。
信息储存在神经元与神经元的连接中。
这一节的内容是课程介绍。
神经网络就相当于一个黑盒子,可以通过构建这个盒子,实现语言识别、视频描述、游戏决策。
起源:联结主义。
信息储存在神经元与神经元的连接中。
Neural Network is modelling the brain.
- group of Perceptorns, Multi-layer Perceptorn can slove XOR problem.
How to train this complex model ?
Neural Networks
1. Introduction
- Neural Networks are taking over!
- Speech Recognition
- Machine Translation
- Image segmentation and recognition
- AlphaGo, AlphaZero
- image to text
So what are neural networks??
- Connectionist Machines
图像理解;语音识别;游戏智能;
大脑:神经元连接;
信息存在于神经元的连接当中;
链式求导法则
对所有值进行求和运算。
标量不用关心顺序。
有了这些值以后,就可以反向计算。
误差反向传播:
从后向前计算导数。从后进入网络,反向传播误差导数。
先计算输出神经元的导数,然后计算感知器放射输入的导数。
vector notation:
Y表示网络最终的输出,即网络的响应。
使用一个阈值函数,比如sigmoid函数,计算y=1的概率。
若是multi-class output:one-hot表示(包含一个1,其他元素都是0):
输出是向量。
softmax层。
————————————————
误差反向传播:
我们会使用链式法则,来计算误差的梯度。
二分类问题:
收敛度量方式:
如果你想要1 0,网络输出是0 1,怎么办?
所以我们经常使用交叉熵来提高效率。
分两种情况:
1、d和y相等;2、d和y不相等。
d是desired output;y是实际输出。
1、当输出的期望d和与样本点实际的标签y相同的时候,散度函数Div(y,d)=0。
2、另d=1,y=0,
-dlogy=-1 * log(0)=-1 * (负无穷)=正无穷
————————————
多分类问题:
需要累加所有的-d * logy,当y和d相同的时候,散度函数Div(y,d)=0;当y和d不同的时候,假设每个分类结果完全不一样的时候,Div(y,d)的结果为无穷大。
只需要计算某一个类的偏导数,其他不用关心。
————————————————————
训练集中所有样本点散度的平均值,就是总误差。
在梯度下降中,每次迭代时,需要用到平均误差来修正其中的变量。在每次迭代中,需要利用上一次迭代的权重以及误差的偏导数来修正更新权重值。
回顾:
给定training set of input-output pairs:
就可以得到这整个数据集中的平均经验误差,然后取得最小值。这是最小化优化问题。
——————————————————
定义导数:
微小变化会在多大程度上影响输出?
若X是一个向量,dx指的是X在每一个方向上的变化。
公式在课件中。
关于梯度的定义。可以定义为行向量(通常),sometimes也可以定义为列向量。
1、把斜率为0作为判断是否达到最小值的依据,是不够充分的。
2、我们真正可以用来检查是否达到最大值和最小值的方法是,首先找到那些导数值为0的点,在这些点中,找到驻点,检查二次导数,若二次导数为正,说明该点是最小值;若为负,则是最大值。
PS:驻点是什么?函数值在这一点停止变化,在驻点前后,函数值的改变的方向会发生变化,要么是先减后增,要么是先增后减。
3、因为函数存在拐点。二阶导数会在拐点处变为0。若某个点,导数为0,则并不一定是极小值点。
————————————————————
对于多变量函数,如何计算驻点?
你要计算梯度的每一项是否都是0。如果有一部分为0,另外一些不是0,那么函数在某一些方向上,还是会变化。
梯度是一个向量,是唯一能使函数值增加最快的方向。
Hessian矩阵:
对有多个输入参数的函数定义二阶偏导数,就是Hessian矩阵。对角线上的元素是对单个输入变量的二阶偏导数。
————————————————————
总结:如何找到极大极小值?
首先找到梯度为0的点的集合。然后计算这些候选点的Hessian矩阵,如果这个函数的Hessian矩阵是对称矩阵。如果矩阵的某个特征向量的特征值是正数,那么沿着这个特征向量的方向,将会得到极小值点。如果某个特征向量的特征值是负数,那么沿着这个方向,将会得到极大值点。
通俗点的解释就是:我们抵达了某个点,它的梯度为0,如果它是极小值点的话,那么Hessian矩阵的每一个特征值都必须是正数。
如果你想得到最大值点,需要计算Hessian矩阵,计算量大。
————————————————
实际中,给定一个初始猜测的X0,一步步迭代后,我们最终会到达导数为0的点,也就是说,一直迭代到函数值不再减小,那么导数就可以变为0。
初始化时,应该选择函数值不为0的点。
如果梯度为正,我们沿着梯度的负方向改变。
总结:
开始迭代后,你可以检查梯度是否为0,或函数值的改变量(两次迭代之间)在变小,直到一个特定的阈值。
表示网络的函数,必须对每一个参数都可微。这样就可以用梯度下降来最小化误差。
更复杂的决策边界问题:
五边形问题。
NP难问题,给出一个问题,很简单就能够证明,要想得到一个答案,是不可行的。
理论可行,计算上不可行。
回到分类问题上,如果修改一点权重,是否是在向正确的方向移动呢?是否在朝着提升效果的方向上移动呢?当然不会!因为输出是一个符号函数,也许可以改变整个W,但是这个输出不会改变!当穿越训练实例时,才是改变输出的唯一方式!
larger problem时,也是一样:
输出是一个阶跃,直到穿越了一个实例,才会发生变化。因此,对于W的小调整,并不会告诉你输出发生了什么变化。所以感知机的规则不适合这里。
另外一个问题:正负线性不可分。
解决solution:
知道反馈,并调整参数。需要找到一个合适的激活函数,来替代当前的符号函数。可能需要一些更平滑的激活函数,这种函数可微分,在任何地方都具有非零导数。=>sigmoid
————————————————————
引入可微分激活函数:
sigmoid可微。当x改变多少,y就改变多少。把W增加一点点,可以得到Y的相应变化。
Y对于X和W是可微的。
w/输入的微小变化,会在多大程度上改变Y。整个网络都是可微的,包括它的所有参数和所有输入。
————————————————————
最小化期望误差:
在实际中,某些X的发生频率更高,另外一些X未出现过。我们希望更多地关注X更可能发生的地方,更少地去关注X不太可能发生的地方。换句话说,对于每一个X,不仅仅希望最小化误差,还根据X的概率来对这些误差进行加权。出现的概率大,则对最后结果影响的概率大。
针对训练数据,计算经验误差,这其实就是优化问题。
————————————————
总结:
多组合优化问题:使用非零导数的连续激活函数,使我们能够估计网络参数。
定义网络输出之间的可区分散度。对于训练实例的期望输出,散度函数必须是可微分的,如果不是的话,即使整个网络是可微的,也会使网络崩溃。如果误差是不可微的,那我们就不能根据参数的调整,得到误差的变化趋势。
通过增加深度,减少神经元的个数。
激活函数并不一定是阈值函数。
前馈网络:
一些输入数据被输入,通过运算符在这些单元上进行运算,他们的输出会在之后这些单元上进行运算,一直这样直到最后,信号永远不会返回到前面的任何单元。单向的/非循环的。
学习一个网络,就是指学习一个网络上的参数。(权重和偏置)
问题:
如何量化误差?
与误差的正负无关;误差的正负不能抵消。然后计算积分。
对g(x)抽样,得到输入-输出pair对。这些项中可能包含噪声。
PS:若对于一个特定的输入X,会得到不同的输出,这样,你从样本中学习到的关系,并不是独一无二的,就需要用噪声来重塑。
假设,关联是唯一的。对于任意一个X,都有唯一的D与之对应。
——————————————————
找到一个超平面,分离0/1点。
超平面通过零点,因此是线性的
=>进一步延伸,向量X的每一个元素与向量W正交。
=>W是一个向量,这个向量与平面上的每一个X正交。这个平面是所有X点的集合,这些点与W是垂直的。
=>|w| * |X| * cos 何时为正?W和X的夹角介于-90到+90之间时。
=>整个感知机算法,都是基于这两个简单的记号,1、w和平面正交;2、对于类别为正的实例,你想让W指向这个实例;对于负的实例,你想让W尽量远离这个实例。
算法:initial W,不管初始值是什么,都可以计算W和训练实例的内机,它们中的一部分会被正确分类,对于这些,不需要做任何事情;我们唯一需要调整W的时刻就是,当遇到一些实例被错误分类的时候。对这些被错误分类的实例来说,我们已经有了实际输出,就是对于每个训练实例的sign(W^T x),假设输出被错误分类了,该如何修正W呢?
只需要在实例被错误分类的时候,更新W。
如果正例被分到了错误的一边,我需要让W加上这个X,让W靠近这个正例;如果负例被分到了正确的一边,我需要让W减去这个X,让W远离这个负例。