iOS人工智能交流模型2

iOS人工智能交流模型1

大纲
1. 神经网络学习
2. 常用模型分析
3. iOS中的CoreML等闭源库
4. 通过bench_ios中的CC_ANN使用激活函数ReLU和Sigmoid实现DNN网络。
5. caffe、tensorflow等对比

LSTM
长短时记忆网络(Long Short Term Memory Network, LSTM),是一种改进之后的循环神经网络,可以解决RNN无法处理长距离的依赖的问题,目前比较流行。
原始 RNN 的隐藏层只有一个状态,即h,它对于短期的输入非常敏感。

再增加一个状态,即c,让它来保存长期的状态,称为单元状态(cell state)。
怎样控制长期状态 c ?方法是:使用三个控制开关
第一个开关,负责控制继续保存长期状态c;
第二个开关,负责控制把即时状态输入到长期状态c;
第三个开关,负责控制是否把长期状态c作为当前的LSTM的输出。
遗忘门(forget gate)
它决定了上一时刻的单元状态 c_t-1 有多少保留到当前时刻 c_t
输入门(input gate)
它决定了当前时刻网络的输入 x_t 有多少保存到单元状态 c_t
输出门(output gate)
控制单元状态 c_t 有多少输出到 LSTM 的当前输出值 h_t

激活函数

Sigmoid

修正线性单元(Rectified linear unit,ReLU)
ReLU 的优点:http://www.cs.toronto.edu/~fritz/absps/imagenet.pdf
https://www.youtube.com/watch?v=wEoyxE0GP2M&list=PL3FW7Lu3i5JvHM8ljYj-zLfQRF3EO8sYv&index=6

Krizhevsky et al. 发现使用 ReLU 得到的 SGD 的收敛速度会比 sigmoid/tanh 快很多
ReLU 的缺点:
训练的时候很”脆弱”,很容易就”die”了
例如,一个非常大的梯度流过一个 ReLU 神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了,那么这个神经元的梯度就永远都会是 0.

e是怎么来的?e = 1 + 1/1! + 1/2! + 1/3! + 1/4! + 1/5! + 1/6! + 1/7! + … = 1 + 1 + 1/2 + 1/6 + 1/24 + 1/120+ … ≈ 2.71828 (!代表阶乘,3!=1*2*3=6)
再举个通俗点的例子:从前有个财主,他特别贪财,喜欢放债。放出去的债年利率为100%,也就是说借1块钱,一年后要还给他2块钱。有一天,他想了个坏主意,要一年算两次利息,上半年50%,下半年50%,这样上半年就有1块5了,下半年按1块5的50%来算,就有1.5/2=0.75元,加起来一年是:上半年1.5+下半年0.75=2.25元。用公式描述,就是(1+50%)(1+50%)=(1+1/2)^2=2.25元。可是他又想,如果按季度算,一年算4次,那岂不是更赚?那就是(1+1/4)^4=2.44141,果然更多了。他很高兴,于是又想,那干脆每天都算吧,这样一年下来就是(1+1/365)^365=2.71457。然后他还想每秒都算,结果他的管家把他拉住了,说要再算下去别人都会疯掉了。不过财主还是不死心,算了很多年终于算出来了,当x趋于无限大的时候,e=(1+1/x)^x≈ 2.71828,结果他成了数学家。

权重的初始化

实际上批量更新的效果会更好,方法是在不更新权重的情况下,把记录集的每条记录都算过一遍,把要更新的增值全部累加起来求平均值,然后利用这个平均值来更新一次权重,然后利用更新后的权重进行下一轮的计算,这种方法叫批量梯度下降(Batch Gradient Descent)。

学习速率的选择
[1e-3 … 1e-5]
选择最优 cross-validation

初始值没有选好的情况

初始化方法
常量初始化(constant)
把权值或者偏置初始化为一个常数,具体是什么常数,可以自己定义

高斯分布初始化(gaussian)
需要给定高斯函数的均值与标准差

positive_unitball初始化
让每一个神经元的输入的权值和为 1,例如:一个神经元有100个输入,让这100个输入的权值和为1.  首先给这100个权值赋值为在(0,1)之间的均匀分布,然后,每一个权值再除以它们的和就可以啦。这么做,可以有助于防止权值初始化过大,从而防止激活函数(sigmoid函数)进入饱和区。所以,它应该比较适合simgmoid形的激活函数

均匀分布初始化(uniform)
将权值与偏置进行均匀分布的初始化,用min 与 max 来控制它们的的上下限,默认为(0,1)

正态分布初始化权重
weight = np.random.randn(in_node, out_node)

Xavier初始化权重
weight = np.random.randn(in_node, out_node)/np.sqrt(in_node)

MSRA初始化权重
Xavier论文中使用的激活函数是tanh函数,而神经网络中使用较广泛的是relu激活函数,所以提出此方法。
weight = np.random.randn(in_node, out_node)/np.sqrt(in_node/2)

梯度消失&梯度爆炸?(层数比较多的神经网络模型)
stochastic gradient descent (SGD)


SGD+Momentum

Nesterov Momentum


学习率的影响

人类中枢神经系统中约含1000亿个神经元;人眼有约1.2亿个视杆细胞,600万~700万的视锥细胞 。10^8

Convolutional Neural Networks
https://www.youtube.com/watch?v=bNb2fEVKeEo&t=0s&index=6&list=PL3FW7Lu3i5JvHM8ljYj-zLfQRF3EO8sYv
1986 Rumelhart 更新规则网络提出 backprop

在卷积神经网络中把这些过滤器当成我们要学习的参数,卷积神经网络训练的目标就是去理解过滤器的参数。
stride 步幅 移动距离

卷积

池化
CNN中使用的另一个有效的工具被称为“池化(Pooling)”。池化可以将一幅大的图像缩小,同时又保留其中的重要信息。池化背后的数学顶多也就是小学二年级水平。它就是将输入图像进行缩小,减少像素信息,只保留重要信息。
通过加入池化层,可以很大程度上减少计算量,降低机器负载。

Relu

一层网络

这一整个过程,从前到后,被称作”前向传播“,得到一组输出,然后通过反向传播来不断纠正错误,进行学习。

RNN循环神经网络,Recurrent Neural Network
长期依赖(Long-Term Dependencies)问题
但是同样会有一些更加复杂的场景。假设我们试着去预测“I grew up in France… I speak fluent French”最后的词。当前的信息建议下一个词可能是一种语言的名字,但是如果我们需要弄清楚是什么语言,我们是需要先前提到的离当前位置很远的 France 的上下文的。这说明相关信息和当前预测位置之间的间隔就肯定变得相当的大。
不幸的是,在这个间隔不断增大时,RNN 会丧失学习到连接如此远的信息的能力。

Vanilla-The state consists of a single ‘hidden’ vector h
优于匹配 匹配要大量数据 这个算完用的时候就很快

例子1、写小说

例子2、写代码

例子3、写代码

LSTM
Long Short Term 网络—— 一般就叫做 LSTM ——是一种 RNN 特殊的类型,可以学习长期依赖信息。LSTM 由Hochreiter & Schmidhuber (1997)提出,并在近期被Alex Graves进行了改良和推广。在很多问题,LSTM 都取得相当巨大的成功,并得到了广泛的使用。
LSTM 通过刻意的设计来避免长期依赖问题。记住长期的信息在实践中是 LSTM 的默认行为,而非需要付出很大代价才能获得的能力!

ResNet Attention    (Residual)
http://www.myzaker.com/article/5997f9f51bc8e01202000015/
直觉上推测,更深度的网络不会比更浅度的同类型网络表现更差吧,至少在训练时间上是这样(当不存在过拟合的风险时)。让我们进行一个思想实验,假设我们已经构建了一个   n   层网络,并且实现了一定准确度。那么一个   n+1   层网络至少也应该能够实现同样的准确度——只要简单复制前面   n   层,再在最后一层增加一层恒等映射就可以了。类似地,n+2、n+3   和   n+4   层的网络都可以继续增加恒等映射,然后实现同样的准确度。但是在实际情况下,这些更深度的网络基本上都会表现得更差。

ResNet的作者将这些问题归结成了一个单一的假设:直接映射是难以学习的。而且他们提出了一种修正方法:不再学习从   x   到   H ( x )   的基本映射关系,而是学习这两者之间的差异,也就是「残差(residual)」。然后,为了计算   H ( x ) ,我们只需要将这个残差加到输入上即可。

假设残差为   F ( x ) =H ( x ) -x,那么现在我们的网络不会直接学习   H ( x )   了,而是学习   F ( x ) +x。
ResNet(残差网络)模块:


生物爆炸 reason? Eye, animal can see.

视觉网络


神经网络发展历史



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值