--- title: "人工智能初步整理" date: 2019-1-2T13:03:27+08:00 draft: false --- # 基本概念 ## 机器学习:一种实现人工智能的方法 - 机器学习最基本的做法,是使用算法来解析数据、从中学习,然后对真实世界中的事件做出决策和预测。与传统的为解决特定任务、硬编码的软件程序不同,机器学习是用大量的数据来“训练”,通过各种**算法**从数据中学习如何完成任务。 ### 分类 - 从学习方法上来分,机器学习算法可以分为监督学习(如分类问题)、无监督学习(如聚类问题)、半监督学习、集成学习、深度学习和强化学习。 ## 深度学习:一种实现机器学习的技术 - 深度学习本来并不是一种独立的学习方法,其本身也会用到有监督和无监督的学习方法来训练深度神经网络。但由于近几年该领域发展迅猛,一些特有的学习手段相继被提出(如残差网络),因此越来越多的人将其单独看作一种学习的方法。 > 最初的深度学习是利用深度神经网络来解决特征表达的一种学习过程。深度神经网络本身并不是一个全新的概念,可大致理解为包含多个隐含层的神经网络结构。为了提高深层神经网络的训练效果,人们对神经元的连接方法和激活函数等方面做出相应的调整。其实有不少想法早年间也曾有过,但由于当时训练数据量不足、计算能力落后,因此最终的效果不尽如人意。 - DNN(深度神经网络) > DNN也演变成许多不同的网络拓扑结构,所以有CNN(卷积神经网络),RNN(递归神经网络),LSTM(长期短期记忆),GAN(生成敌对网络),转移学习,注意模型(attention model)所有的这些被统称为深度学习(Deep Learning),它正在引起整个机器学习界的关注。强化学习: ## 强化学习 强化学习与传统监督机器学习的曲线拟合方法有很大不同。尤其是,强化学习学习得非常快,因为每一个新的反馈(例如执行一个行动并获得奖励)都被立即发送到影响随后的决定。 **强化学习(RL)是一个序列决策问题。** # 具体 ## 卷积神经网络 CNN 常用于**特征值提取**,解决分类问题,解析上是非序列的。 ### 结构 - 回到细节上来。更为详细的 CNN 工作概述指的是你挑一张图像,让它历经一系列**卷积层、非线性层、池化(下采样(downsampling))层和完全连接层**,最终得到输出。正如之前所说,输出可以是最好地描述了图像内容的一个单独分类或一组分类的概率。如今,难点在于理解其中每一层的工作方法。我们先来看最重要的部分。 - CNN 的第一层通常是卷积层(Convolutional Layer)。 ![cnn卷积层](https://i.ibb.co/TPLRzwZ/v2-790a3d600c6b6208f3c7db27c393a1ea-r.jpg) >卷积核(滤波器,convolution kernel)是可以用来提取特征的 图像和卷积核卷积,就可以得到特征值,就是destination value ![rgb图片的卷积](https://i.ibb.co/HT4YdF3/v2-9f990e17f974d3f49236d0c1c8fba2f5-hd.jpg) - 非线性激活层 官方: 卷积层对原图运算多个卷积产生一组线性激活响应,而非线性激活层是对之前的结果进行一个非线性的激活响应。 **说白了就是对其中的值进行筛选,剔除一些没有用的值** - pooling池化层 `` 卷积操作后,我们得到了一张张有着不同值的feature map,尽管数据量比原图少了很多,但还是过于庞大(比较深度学习动不动就几十万张训练图片),因此接下来的池化操作就可以发挥作用了,它最大的目标就是减少数据量。 `` >池化分为两种,Max Pooling 最大池化、Average Pooling平均池化。顾名思义,最大池化就是取最大值,平均池化就是取平均值。 ​ 如下就是最大池化: ![池化](https://i.ibb.co/fDYgTWB/v2-bdc0421a13e06122b6d13fb84cdf5e9f-hd.png) - 全连接层 > 全连接层的形式和前馈神经网络(feedforward neural network)的形式一样,或者称为多层感知机(multilayer perceptron,MLP) 全连接层要做的,就是对之前的所有操作进行一个总结,给我们一个最终的结果。 它最大的目的是对特征图进行维度上的改变,来得到每个分类类别对应的概率值。 全连接层,顾名思义就是全部都连接起来,让我们把它与卷积层对比起来看。 > 卷积层不是全连接,卷积层采用的是“***局部连接”\***的思想,回忆一下卷积层的操作,是用一个3X3的图与原图进行连接操作,很明显原图中只有一个3X3的窗口能够与它连接起来。 ![img](https://pic3.zhimg.com/80/v2-2ced3a81d5977a3bf70f9721a2fd725e_hd.png) 那除窗口之外的、未连接的部分怎么办呢? 我们都知道,采用的是将窗口滑动起来的方法后续进行连接。这个方法的思想就是***“参数共享” ,\***参数指的就是filter,用滑动窗口的方式,将这个filter值共享给原图中的每一块区域连接进行卷积运算。 `敲一下黑板:局部连接与参数共享是卷积神经网络最重要的两个性质` 全连接层中有一个非常重要的函数----Softmax,它是一个分类函数,输出的是每个对应类别的概率值 ### 神经网络的训练与优化 神经网络训练的是卷积核(filter)。 - 具体的训练方法: BP算法---BackProp反向传播算法。 1. 用随机初始化法来进行赋值,卷积核获取到了一个随机值,便可以开始工作。 2. 训练的终极目的就是使得这个误差最小,常用的方法是 梯度下降法。 >一种简单定义误差error的计算公式为 [公式] ![](https://i.ibb.co/qNgjVGt/v2-15c5b57db291e7b092e9550ea94e452e-hd.png) 用这种方法来改变卷积核里的参数W使得误差最小。 ## 循环神经网络(RNN) 解决序列性输入数据的问题: 即上一个输入对下一个输入有影响的情形。 > 常见的有: > 1. 语义分析 > 2. 股市预测等等具有前后顺序,时间顺序的情形。 ### 结构 - 首先看一个简单的循环神经网络如,它由输入层、一个隐藏层和一个输出层组成: ![rnn](https://i.ibb.co/thqrfS8/v2-3884f344d71e92d70ec3c44d2795141f-hd.jpg) > 我们现在这样来理解,如果把上面有W的那个带箭头的圈去掉,它就变成了最普通的全连接神经网络。x是一个向量,它表示输入层的值(这里面没有画出来表示神经元节点的圆圈);s是一个向量,它表示隐藏层的值(这里隐藏层面画了一个节点,你也可以想象这一层其实是多个节点,节点数与向量s的维度相同); > > > > U是输入层到隐藏层的权重矩阵,o也是一个向量,它表示输出层的值;V是隐藏层到输出层的权重矩阵。 > > > > 循环神经网络的隐藏层的值s不仅仅取决于当前这次的输入x,还取决于上一次隐藏层的值s。向后传播会更新W,当W固定的时候就是你模型结束的时候。 > ![](https://i.ibb.co/k32nz6y/v2-b0175ebd3419f9a11a3d0d8b00e28675-hd.jpg) > > > > 具体公式: > ![](https://i.ibb.co/vBgXBb6/v2-9524a28210c98ed130644eb3c3002087-hd.jpg) `以上只是一种简单的单向循环神经网络` ## 长短期记忆(Long short-term memory, LSTM) ### 定义: 是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说,就是相比普通的RNN,LSTM能够在更长的序列中有更好的表现。 ### 基本结构 - LSTM结构(图右)和普通RNN的主要输入输出区别如下所示。 ![](https://i.ibb.co/QCL48Vc/v2-f716c816d46792b867a6815c278f11cb-hd.jpg) 对比: ![](https://i.ibb.co/ZXbN0YP/v2-e4f9851cad426dfe4ab1c76209546827-hd.jpg) 相比RNN只有一个传递状态 ![[公式]](https://www.zhihu.com/equation?tex=h%5Et+) ,LSTM有两个传输状态,一个 ![[公式]](https://www.zhihu.com/equation?tex=c%5Et) (cell state),和一个 ![[公式]](https://www.zhihu.com/equation?tex=h%5Et) (hidden state)。(Tips:RNN中的 ![[公式]](https://www.zhihu.com/equation?tex=h%5Et) 对于LSTM中的 ![[公式]](https://www.zhihu.com/equation?tex=c%5Et) ) 其中对于传递下去的 ![[公式]](https://www.zhihu.com/equation?tex=c%5Et) 改变得很慢,通常输出的 ![[公式]](https://www.zhihu.com/equation?tex=c%5Et) 是上一个状态传过来的 ![[公式]](https://www.zhihu.com/equation?tex=c%5E%7Bt-1%7D) 加上一些数值。 而 ![[公式]](https://www.zhihu.com/equation?tex=h%5Et) 则在不同节点下往往会有很大的区别。 ### 深入LSTM结构 首先使用LSTM的当前输入 ![[公式]](https://www.zhihu.com/equation?tex=x%5Et) 和上一个状态传递下来的 ![[公式]](https://www.zhihu.com/equation?tex=h%5E%7Bt-1%7D) 拼接训练得到四个状态。 ![img](https://pic4.zhimg.com/80/v2-15c5eb554f843ec492579c6d87e1497b_hd.jpg) ![img](https://pic1.zhimg.com/80/v2-d044fd0087e1df5d2a1089b441db9970_hd.jpg) 其中, ![[公式]](https://www.zhihu.com/equation?tex=z%5Ef+) , ![[公式]](https://www.zhihu.com/equation?tex=z%5Ei) ,![[公式]](https://www.zhihu.com/equation?tex=z%5Eo) 是由拼接向量乘以权重矩阵之后,再通过一个 ![[公式]](https://www.zhihu.com/equation?tex=sigmoid+) 激活函数转换成0到1之间的数值,来作为一种**门控状态**。而 ![[公式]](https://www.zhihu.com/equation?tex=z) 则是将结果通过一个 ![[公式]](https://www.zhihu.com/equation?tex=tanh) 激活函数将转换成-1到1之间的值(这里使用 ![[公式]](https://www.zhihu.com/equation?tex=tanh) 是因为这里是将其做为输入数据,而不是门控信号)。 **下面开始进一步介绍这四个状态在LSTM内部的使用。(敲黑板)** ![img](https://pic2.zhimg.com/80/v2-556c74f0e025a47fea05dc0f76ea775d_hd.jpg) ![[公式]](https://www.zhihu.com/equation?tex=%5Codot) 是Hadamard Product,也就是操作矩阵中对应的元素相乘,因此要求两个相乘矩阵是同型的。 ![[公式]](https://www.zhihu.com/equation?tex=%5Coplus) 则代表进行矩阵加法。 LSTM内部主要有三个阶段:(或者说 三个门) 1. 忘记阶段。这个阶段主要是对上一个节点传进来的输入进行**选择性**忘记。简单来说就是会 “忘记不重要的,记住重要的”。 `对数据进行选择忘记` 具体来说是通过计算得到的 ![[公式]](https://www.zhihu.com/equation?tex=z%5Ef) (f表示forget)来作为忘记门控,来控制上一个状态的 ![[公式]](https://www.zhihu.com/equation?tex=c%5E%7Bt-1%7D) 哪些需要留哪些需要忘。 2. 选择记忆阶段。这个阶段将这个阶段的输入有选择性地进行“记忆”。主要是会对输入 ![[公式]](https://www.zhihu.com/equation?tex=x%5Et) 进行选择记忆。哪些重要则着重记录下来,哪些不重要,则少记一些。当前的输入内容由前面计算得到的 ![[公式]](https://www.zhihu.com/equation?tex=z+) 表示。而选择的门控信号则是由 ![[公式]](https://www.zhihu.com/equation?tex=z%5Ei) (i代表information)来进行控制。 > 将上面两步得到的结果相加,即可得到传输给下一个状态的 ![[公式]](https://www.zhihu.com/equation?tex=c%5Et) 。也就是上图中的第一个公式。 3. 输出阶段。这个阶段将决定哪些将会被当成当前状态的输出。主要是通过 ![[公式]](https://www.zhihu.com/equation?tex=z%5Eo) 来进行控制的。并且还对上一阶段得到的 ![[公式]](https://www.zhihu.com/equation?tex=c%5Eo) 进行了放缩(通过一个tanh激活函数进行变化)。 **总结来说,就是三个门,遗忘门,输入门,输出门** 与普通RNN类似,输出 ![[公式]](https://www.zhihu.com/equation?tex=y%5Et) 往往最终也是通过 ![[公式]](https://www.zhihu.com/equation?tex=h%5Et) 变化得到。 - 总之LSTM主要就是可以解决长期记忆的问题,对于序列的理解也更加智能化,(具有选择性) ## Attention机制 ### Attention机制的本质 attention机制的本质是从人类视觉注意力机制中获得灵感(可以说很‘以人为本’了)。大致是我们视觉在感知东西的时候,一般不会是一个场景从到头看到尾每次全部都看,而往往是根据需求观察注意特定的一部分。而且当我们发现一个场景经常在某部分出现自己想观察的东西时,我们就会进行学习在将来再出现类似场景时把注意力放到该部分上。这可以说就是注意力机制的本质内容了。至于它本身包含的‘自上而下’和‘自下而上’方式就不在过多的讨论。 ### Attention机制的理解 Attention机制其实就是一系列注意力分配系数,也就是一系列权重参数罢了。 ![img](https://img-blog.csdn.net/20180525113637625) 图9 Attention机制的本质思想 **总的来说,就是给不同的数据分配不同的权值。也就是说,分配不同的注意力。** [一个详细的csdn博客](https://blog.csdn.net/hpulfc/article/details/80448570)