embedded electronic systems for AI/ML 笔记第二篇

Posted 无规则@lucio

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了embedded electronic systems for AI/ML 笔记第二篇相关的知识,希望对你有一定的参考价值。

目录

分类器(Classifiers)

Nearest Neighbor

nearest neighbor,寻找最近的邻居,不需要训练,只需要找到距离函数(distance function)。推理速度很慢,需要将每一个输入和所有的数据做对比。这里引入方法KNN(K Nearest Neighbors),KNN有更少的分类误差,但是计算成本更高。

Logistic Regression

KNN从原理上并不是真正的学习。我们可以用线性回归去实现分类。
决策边界问题:线性回归创造线性决策边界,使用非线性回归(即高阶多项式)去创造非线性决策边界。
当进行逻辑回归时,会产生梯度消失的问题,会阻止权重weight不再更新,即不再学习。而权重更新和线性回归完全相同
w ← w – α (y – t) X / N

Linear Support Vector Machine

与Logistic Regression相似,但是损失函数不同。
f(x) = sgn(w * x + b)
最大化边界(maximizing the margin)来像线性回归一样有效。
我们选择合适的w和b来最小化边界。

Soft Linear Support Vector Machine

寻找最合适的值去最小化slack,即错误数据与margin box的最大距离。

Non-Linear Support Vector Machine

找到一个高维特征映射空间使得训练集可分离。
通常高斯(Gaussian)映射方法是非常有效的。

Decision Trees 决策树

有更好的启发性近似学习算法
能够模拟任何的输入方程,无论是离散的还是连续的特征。
对于一个离散方程选择一个最小决策树是非常困难的,小的决策树计算便宜但是又高分类误差,大的决策树计算昂贵,有高的方差。所以小树森林(forest of small tree)结合两者的特点,可以训练很多个小树,随机性(Randomness)要比mini-Batch要好得多,通过投票(voting)来将他们的决定结合起来。
易于使用无需调整,但仅仅对于合理的特征数量。对于照片就不合适,因为一个照片的特征有百万个,无法用此方法。

总结

Generalized Linear Model 是一个非常有用的ML模型,通过梯度下降进行廉价训练,通过矩阵乘法进行廉价推理,也可在并行结构上很好的矢量化。
SVM更加通用,但计算昂贵,但仍可矢量化。
DT是对于虚弱推理平台的很好的折中(compromise),但不能用于GPU上。

Neural Networks

神经网络中每个神经元是输入特征的线性组合,随后是非线性的激活函数(activation function),它对泛化很重要。
线性组合部分计算起来比较简单,非线性部分是多个非线性方程中的一个。

激活函数

  1. Sigmoid(logistic regression) 计算困难 比较平滑
  2. Hard threshold 计算简单 不平滑,类似方波
  3. Hyperbolic tangent 计算困难 比较平滑
  4. Rectified Linear Unit(RELU) 计算容易 不平滑
  5. Soft RELU 计算困难 平滑

神经元层数


神经元的隐藏层(hidden layer)是对于学习任意方程是非常有效的。若想学习有意义的方程需要很多个神经元。
更多的层级是通过减少总体的网络尺寸(overall network size)来加速训练的进程。
神经网络的输出应该为输出类别,但是最后一层的神经元的输出并不保证有可比较的权重,这时使用SoftMax方程

这个也可用于每一层之间的激活函数。

backPropagation:

  1. 初始化神经元线性部分的随机权重
  2. 计算prediction error
  3. 根据上述的误差估计影响调整权重,使用灵敏度(sensitivity 在这里是输出对输入偏导)
  4. 重复所有的训练集的数据,可以采用小批量(mini-batched)来提升效率
Decision boundary
  1. 初始化随机权重
  2. 给输入计算误差,反向传播然后调整权重。
  3. 最终边界将收敛到合理的范围,而为了提高收敛到一个局部最小值的机会,训练会重复多次。

backPropagation的实际应用

我们本课程用的神经网络训练框架为TensorFlow和Pytorch。

  1. 首先我们先用python对给定神经网络结构创建一个计算图表,像下图这种:
  2. 然后我们对一小批量的输入进行正向评估(forward evaluation)
  3. 计算局部梯度值(偏导)
  4. 反向传播输出误差到一个局部误差
  5. 基于局部误差更新权重w
    反向传播流程如下:
    假如训练集太大,Jacobians(也就是输出对输入的偏导矩阵网络)会非常巨大。我们实际上都是用Partial Jacobians(局部雅格比式),并使用批量训练,让后计算更新每个批量的平均权重和每一层的平均误差贡献度。

多层网络和深度学习

网络的每一层都学输入空间的一些特征。
连续的层学习越来越多复杂的特征,并不需要输入数据预处理。
经典的多层神经网络带有sigmoid非线性问题:
sigmoid饱和导致梯度消失,输出和局部梯度总是正的,所以传播梯度和输出梯度同符号。计算成本十分昂贵。最多不超过2-3层。
改善方法:

  1. tanh 既有正输出又有夫输出,梯度下降收敛改善,梯度消失,计算成本昂贵。最多不超过2-3层。
  2. RELU 正区域无法饱和,容易计算,比tanh和sigmoid梯度下降收敛要快,当输入小于零梯度消失。所以当输入小于零时,RELU永远无法再被激活,因为不会再有权重继续更新。
  3. leaky RELU max(a,x,x) 从不饱和,容易计算,收敛比tanh和sigmoid快,永远不会死机(不能被激活),a是由BackPropagation来训练出来的。

神经网络的正则化

经过测试和尝试,将权重的平方和加入到成本函数(cost function)中,由于权重太多更难去调整 λ,因此他们的贡献可能比误差项更占据主导地位。
所以我们可以选择随机设置一些神经元的所有或者部分的权重为0,即Dropout(直接去神经元),DropConnect(去神经元之间的部分权重连接)。
当training精确度和validation精确度一直上升但并不相等时,我们需要继续训练。
当训练精确度和验证精确度相等时,bias太大或者欠拟合状态,需要增加模型的复杂度或者改变模型(加参)
当训练精确度和验证精确度有较大间隙时,可能方差过大过拟合,需要增加正则化的权重,然后继续增加训练数据。或者停在最佳验证精确度的位置。

分类器的视觉评估(visual evaluation)

分类结果的质量会在confusion matrix(混淆矩阵)上观察到。
混淆矩阵专门用于是否分类问题上。
需要知道一些术语:Sensitivity(hit rate,true positive rate),Specificity(true negative rate),Fall-out(false positive rate),Miss rate(false negative rate)。

卷积神经网络(Convolutional Neural Network)CNN

由于计算机视觉的深度神经网路有太多的参数以至于无法有效的被训练。
所以卷积神经网络有专门的连接结构用于模式识别(pattern recognition)任务
完整的神经元与神经元之间的连接被卷积所取代。
集合(Pooling)引入了进一步的有限连接(limited connectivity)
CNN的是由input image,convolutional stage,non-linear stage和pooling stage组成。

convolutional layers

CNN中的filter是3D张量(tensor),但由2D内核组成。内核和所有的神经元卷积。相当于一个移动窗口,和图像中每一个像素点进行卷积移动。

Pooling layers

Pooling将图像分割成不重叠矩阵块,输出每个块中最大的值。可用于减少数据大小和计算量。

Full CNNs

组成:1. Convolutional layers 2. Pooling layers 3. “Normal” layers

Deeper and deeper CNNs

尽管使用RELU时,很深的网络中梯度还是会消失

自然语言处理(Natural Language Processing)

图像识别需要双维处理(bi-dimensional),缩放和空间转换。CNN通过一个像组合电路一样特殊的结构去实现它。
而自然语言处理更依赖于时间排序(temporal sequencing)
递归神经网络(recurrent neural network)使用反馈,在反向传播过程中梯度消失变得戏剧化。

NLP tasks

Speech-to-text(STT)
Text-to-speech(TTS)
Text-based NLP

Time Delay Neural Net

及时展开RNN可以防止梯度消失,像一个FIR filter(而RNN时一个IIR)。
并不适用于NLP。
还有Long-Short-Term-Memory network通过一个sigmoid发送发聩去阻止梯度消失。

以上是关于embedded electronic systems for AI/ML 笔记第二篇的主要内容,如果未能解决你的问题,请参考以下文章

Tensorflow - tensorflow.models.embeddings 中没有名为“embeddings”的模块

NotFoundError:容器本地主机不存在。 (找不到资源:localhost/embedding_1/embeddings)

keras的Embedding层

embedding在工业界应用以及训练的tricks

Keras官方中文文档:嵌入层Embedding

QMC5883L磁力计介绍(硬件+软件)(附STM32程序!!!)