人工智能初学笔记系列(1):基础概念与进化流程

自学人工智能时记下的笔记系列(1)

先了解了人工智能思想的发展流程。在平时提及人工智能总是伴随着很多新概念和新名词,比如机器学习、深度学习、卷积、RNN、CNN、强化学习等等,很容易就绕晕在了。所以,第一步显示厘清人工智能涵盖的范围、各个概念之间关系、目前的发展情况等。初学的话基本不涉及公式和算法。

一、人工智能学习角度的逐步进化

1)机器学习角度1--专家系统

专家系统:基于行业专家提供的解决问题的既定规则,由系统自动执行判断和操作。

专家系统的局限:实际问题数不胜数,出现无法预知的新情况,无法描述的隐性规则(例如没有清晰明确的判断规则)。

2)机器学习角度2:基于符号推理的系统vs基于概率推理的系统

按照人类的逻辑学习知识。归纳和推演

基于符号和概率的推理还是基于人类已知知识。比如:10岁上学的孩子经常买文具,小明是一个10岁上学的孩子,所以买文具的概率很大。

3)机器学习角度3:学习人类如何学习,模拟人类的思维,仿生学习方法:联结主义、进化算法、强化学习

3.1)连结主义:机器模拟人脑神经元的连接模式进行学习。Hebb Law, 学习是改变连接。

例如:从生理上,狗看到食物会分泌唾液。给狗喂食的时候同时摇铃,按这种模式训练(学习)一段时间后,以后会发现只摇铃狗也会分泌唾液。但如果持续一段时间的只摇铃不喂食,狗慢慢也不会分泌唾液。

一波三折的连结主义:

  1. 高峰:Frank Rosenblatt 感知机(实物模拟神经元)
  2. 低谷:专家系统(虽然没有学习能力)
  3. 高峰:Hopefield model (用磁针类比神经元,磁针会使周围的磁针与其指向一致,产生关联记忆的功能) 
  4. 低谷:支持向量机、随机森林(传统基于统计的机器学习崛起)
  5. 高峰:深度学习(因为有了大数据、足够的机器算力,出现CNN、RNN)

3.2)进化算法:模拟生物进化学习,比如竞争、自然选择的规则

有一个基因(规则)池子,进行竞争,竞争中的获胜者可以加强自身基因(规则),最终胜利者的基因(规则)通吃,失败者的基因(规则)被淘汰

适用于当有很大不确定行的时候,是一种破坏性创新算法

3.3)强化学习:延迟满足,行为反馈,通过对行为结果的反馈进行学习,进而调整行为。

 

二、机器学习:模拟人类的学习习惯

机器学习的主要方法

  1. 线性回归regression,属于监督学习
  2. 分类classification-KNN、概率-朴素贝叶斯、优先级处理-决策树,属于监督学习;
  3. 聚类,属于无监督学习;
  4. 降维思维:PCA,属于无监督学习。

(一)线性回归

线性模型:Y =W0+W1X1+W2X2+......+WiXi+e, e为随机扰动值

梯度下降 -> 线性回归 -> 最优线性模型

欠拟合underfitting,过拟合overfitting

(二)分类

1. KNN(K近邻算法): nearest neiborhood

属于监督学习

选择显著特征(非常重要!!),收集显著特征的数据,把收集到的数据放在特征空间(比如x-y坐标轴)表示。

k表示找k个距离最近的邻居,取这k个邻居的多数状态,比如点A的k个最近邻居中大多数值为1,少数为0,则认为A的值为1。k的值越小越精确,但容易过拟合,k值也不是越大越好,太大(比如为所有数据)则无法有效分类。

距离的算法:欧式距离Euclidean(平方差求和后开方)、曼哈顿距离(用于方块类的街区,只能横平竖直的走,不能走对角线)

花的品种辨别就是一个典型的分类问题,特征值较少时,可以用KNN。

高维空间(特征太多)时,距离会变得太模糊,很难通过距离分类,knn失灵。

2. 概率-朴素贝叶斯

属于监督学习

朴素贝叶斯:

  • 假设所有特征都是独立的
  • 公式:P(c|x) * P(x) = P(x|c) * P(c)  c:结果,x:特征
  • 当有多个特征x的时候,因为每个特征是相互独立的,所以可以连乘
  • P(c|X1,2,3,......,n) = P(x1|c)*p(x2|c)*......*P(xn|c) *P(c)

当特征太多时,可以考虑用朴素贝叶斯。

文章分类,用关键词,可以使用朴素贝叶斯。

文章分类的步骤:已知某类文章(比如宗教类文章)中关键词A(例如god)出现的概率,以及某篇未分类文章X中该关键词A(god)的出现概率,则可以对文章X进行分类(是否宗教类)。

3. 决策树(最常用的分类方法)

是最接近人类决策的思路;由一串问题组成,每个问题都能将数据划分出符合及不符合两类,最终符合所有问题答案的数据点,则为最终选择的结果。

比如,让计算机猜心中所想的任一人物。

(三)降维 Dimension Reduction

属于无监督学习

常用于剔除冗余特征。比如将数据中的8个特征减少至更少的特征。可以用于减少过拟合的情况。

比如,在房价分析案例中,可以用降维剔除一些冗余特征,比如一般房屋面积越大,车库面积就越大,所以当既有房屋面积又有车库面积这两个特征时,车库数量对于房价预测是冗余的,可以剔除。

如何降维:PCA( Principle Compoent Analysis) 

  • 坐标变换
  • 将原x,y特征组合变成v特征,抓住主要矛盾。具体方法一般是靠肉眼看或者求数据矩阵的特征值。(此处需要恶补线性代数中的特征值和特征向量求解)
  • 比如房价预测中,将房屋面积与车库面积相加组合为房屋总面积特征,将2个特征降维成1个特征,再用这1个特征与房屋价格做线性回归。

(四)聚类 Cluster

属于无监督学习

将数据根据某种特定的假设进行分堆。

比如,将数据放在坐标轴上,发现不同组数据之间的距离不一样,有一部分数据聚在一起,另一部分距离聚在一起,这两部分数据之间距离较大,则可以将数据分堆。

 

三、神经网络:模拟人类大脑

三大类神经网络:

  1. 前向:Perceptron(P, 感知机), Feed Forward (FF), Deep FF(DFF), Radial Basis Network(RBF), CNN(卷积,处理图像)
  2. 带反馈的(用于处理需要记忆的情景):Recurrent Nerual Network(RNN), Long/Short Term Memory(LSTM), Gated Recurrent Unit(GRU) 
  3. 自编码:Auto Encoder(AE), Variational AE(VAE), Denoising AE(DAE), Sparse AE(SAE)

自编码器:深度学习鼻祖,可以自动剔除噪音,获取最本质的特征。

推荐文章:Hinton: reducing the dimensionality with NN

(一)机器视觉:图像识别,让机器看懂图像

1. 卷积 Convolution

卷积convolution:注意卷积的算法与矩阵乘法完全不同。

1维:长向量A(假设长度为9)与短向量B(假设长度为3)进行卷积,就是A从头开始依次截取每3个一组的数与B相乘,最后得出卷积后的结果向量C,C的长度为9-3+1=7。

2维:卷积用的矩阵B(简称卷积核)与输入矩阵A中对应大小的矩阵进行相乘,得出一个值,然后卷积核平移一列,再相乘。最后得出一个结果矩阵。

卷积具有平移不变性(普适)。因为用来做卷积核的B不变。比如图像中的猫从图像中的位置移到了另一个位置,所以还是能提取出猫的图像。但是卷积先天不具有旋转不变性,但可以通过不断地学习获得针对特定情况具有旋转不变性的卷积核

不同的卷积核之间需要有激活函数f:卷积核,即一个矩阵,是一种线性关系。如果多层卷积之间没有激活函数,则由于线性关系可以相加,所以多层线性卷积其实可以合并成一层线性卷积,因此如果想要实现多层卷积,则需要在两个卷积核之间加入非线性函数(比如开闭门,非1即0),这个非线性函数也叫激活函数。

非线性函数,模拟神经元的电压变化,比如接触到足够量的光信号之后,视网膜上的神经元会出现反映,即量变引起质变。

2. 池化pooling

最大池化max pooling:在既定的矩阵内找最大值,比如2*2的矩阵内有(1,2,3,4),最大池化即将该矩阵模糊化为最大值4.

池化适用于抓大放小,将图片卷积后大量冗余的信息踢出。

 

3. 卷积的逻辑链

为什么要多层卷积?感受野扩大。比如,假设第一层选择池化,选出3*3矩阵中最具代表性的数值作为第一层结果,即池化每一个结果对应的是原图的3*3视野;第二层卷积的一个结果对应了第一层的3*3视野,即相当于对应原图的9*9的视野。

  • 逻辑              操作
  • 平移不变--> 权值共享
  • 局部信息--> 稀疏交互 
  • 抓大放小 --> 加入池化

顶层特征的全面整合:全连接层。对通过卷积获得的各项顶层特征整合在一起,最终实现一个概念。比如,通过卷积获得了对图像中出现的眼睛、嘴、毛发、体型等特征的最终值,但这些特征不是最终目的,而是要将这些特征值整合起来,最终判断出该图像里的是猫、狗、人等实物。

最终决策:softmax分类概率

机器视觉:给描述生成具体图像(例如图像生成、图像变换,例如生成猫图、人脸变老)、给图像反馈描述(图像识别、目标检测,例如识别云朵、人脸监测)、相似图像进行归类(图像聚类,例如判断哪些为人物照片)、语义识别(从卫星云图中识别出树木、道路等)

对抗网络:使用图像生成算法创造一张猫图,然后使用图像识别网络对生成的这张猫图进行识别,判断是真实的猫还是机器生成的猫。

(二)自然语言处理:让机器听懂故事

时间序列:因为对于大脑来说,文字、视频是按时间顺序一个个接收的,与静态图像各要素一起展示不同,所以时间序列对于听懂故事很重要。

因为有了时间,所以记忆能力很重要。记忆是处理时间序列信息的基础。如果没有记忆能力,新的信息会覆盖之前的信息,就没有办法理解文字进而听懂故事了。机器记忆时间的长短会影响机器处理语言的能力。

1. N-gram:RNN之前的语言模型

用单词出现的概率判断:出现单词A之后,单词B出现的概率更高。例如“我爱”之后出现“你”的概率比较高,出现”一“的概率就比较小,而”我爱你“之后出现”们“的概率会升高,比单独出现”们“的概率要高。

根据单词出现概率判断,符合概率连乘:

  • P(w1, w2,......,wt) = P(w1)*P(w2|w1)*P(w3|w2,w1)*......*P(w(t)|w(t-1),......, w2,w1)
  • w(i) 代表一个单词
  • 假设每个单词出现的概率只受前一个单词的影响,则上述连乘公式可简化为:P(w1)*P(w2|w1)*P(w3|w2)*......*P(w(t)|w(t-1)), 也称为bigram
  • 假设每个单词出现的概率受前面两个单词的共同影响,则连乘公式可简化为:P(w1)*P(w2|w1)*P(w3|w2, w1)*......*P(w(t)|w(t-1),w(t-2)), 也称为trigram

 N-gram:表示每个单词出现的概率受前面n-1个单词的共同影响。

2. RNN (Recurrent Neural Network)

通过循环(回声)创造记忆。可以根据之前的文字\单词预测或生成下一个文字\单词

将前序神经元中间层h(t-1)的信息传给下一个神经元的中间层h(t)

  • 向量h(t) = tanh[向量w*向量h(t-1)+x(t)]
  • 其中,向量w是常量,即不随着时间的变化而变化。
  • 上式右侧第一项是来自上一时间点的信息,第二项是来自外部的输入,根据递归可知第 t时刻的中间层h(t)包含了前面从1至t时间的输入项x的信息。
  • tanh()是为了将里面的线性函数变成非线性函数
  • 将上面的公式用python实现一步,如下:
#极简版RNN,用于展示逻辑,一步反馈 
class RNN: 
    #... 
    def step(self, x): 
        # update the hidden state (dot表示矩阵相乘) 
        self.h = np.tanh(np.dot(self.W_hh, self.h)+np.dot(self.W_xh, x)) 
        #compute the output vector 
        y = np.dot(self.W_hy, self.h) 
        return y

最后,将y(t)输入softmax函数,将y(t)数值变成概率,即将数值映射在0-1的区间内。softmax函数,输入的数值越大则得到的概率越大。

如果每一步的输入字母均来自外部,则是一个预测模型;如果将上一步输出的字母作为下一步的输入字母,则是一个语言生成模型。

生成模型是有衰减效应的,不能无限生成,因为每次传递的中间层都乘以了一个小于1的参数,所以肯定在某一步衰减到无法进行生成。

精细的语言编码 : word2vec

  • 考虑了单词之间并不是完全独立的,单词之间是有一定的关联度的,
  • 有的单词之间比较近(比如burger&sandwich,king&quenn更相近),有的关系比较远(比如burger&king, sandwich&queen)。
  • word2vec将单词编码到空间中,空间距离越相近的单词说明关联更紧密,同时包含了语法的变换,比如me - my = you - your。

RNN也可以理解为一个自动编码器,即RNN通过学习可以生成一个程序P,使得输入信息x变为输出信息y。

用RNN生成诗词

  1. CSM行编码:先用CNN提取上文每一行的特征(如上文有两行诗,则CNN分别提取第一行和第二行的特征)
  2. 再用RNN将上文的特征依次输入下文(将第一行特征输入第二行,再将第二行的特征作为背景输入用于生成下文)
  3. RCM:背景提取模型,获取上下文背景信息,RNN。
  4. RGM:下文生成模型,RNN。

 3. LSTM

LSTM:为解决RNN随时间衰减的问题,有记忆更长时间尺度的能力。

  •  LSTM是在RNN上加记忆cell和3道门(write gate, keep gate, read gate),先用记忆cell对保留本层信息,类似建立了一个副本,再用门控制这个副本是否使用、是否传入下一层使用。
  • 输入门write gate: 控制本层输入的原信息是否需要纳入记忆。
  • 保留门keep gate = 1-遗忘门forget gate:用于控制传入到本层的所有过去信息是否要保留(传给下一层),还是遗忘(不传给下一层)。
  • 输出门read gate:控制是否将本层结果输出,即是否读取本层生成的结果。
  • 在RNN的中间层h(t),再加一层变为c(t)
  • LSTM中,遗忘门(保留门)最重要!

LSTM具体公式如下:

  • i(t) = k*[Wxi*x(t)+Whi*h(t-1)+Wci*c(t-1)+bi]
  • f(t) = k*[Wxf*x(t)+Whf*h(t-1)+Wcf*c(t-1)+bf]
  • c(t) = f(t)*c(t-1) + i(t)*tanh[Wxc*x(t)+Whc*h(t-1)+bc], 其中tanh函数即为原RNN 
  • o(t) = k*[Wxo*x(t)+Who*h(t-1)+Wco*c(t)+bo)
  • h(t) = o(t)*tanh[c(t)]
  • 门变量i(t)是由x, h, c三个变量共同控制的。

 

四、强化学习

强化学习:延迟满足,在不断尝试中根据结果调整后续行为。

强化学习(reinforced)与监督学习(supervised)的区别:给一张老虎的图片,通过监督学习得到结果“老虎”,根据图片得到固定的概念;通过强化学习得到结果“逃跑”,根据图片得出下一步行为。

强化学习框架:

  1. 探索与收益的平衡:学会抽样,动态调整策略
  2. 当下与将来的平衡:引入TD学习,Markov决策过程,避免聚局部最优
  3. 无限空间的探索:值函数学习,策略函数学习,建立世界模型

强化学习第一层:不确定性下的决策

  • 试错:行为与惩罚(学习骑车,不断尝试、摔倒、疼、再尝试,学会),行为与奖励(赌博)。
  • 根据不断的试错更新获得收益的概率:先验概率变成后验概率
  • 要考虑探索与收益的平衡:用中奖概率优化抽样概率,更多在中奖概率高的池子中选择,减少在中奖概率低的池子中选择,则奖励概率越高。
  • 伪代码: choice = numpy.argmax(pymc.rbeta(1+self.wins, 1+self.trials-self.wins))

强化学习第二层:奖励是未来的,平衡当下与未来

  • 多步复杂游戏,奖励延迟获取,例如围棋游戏、扫地机器人
  • 要衡量时间的价值,当下的行为vs未来的收益
  • 引入状态state:通过观测obervation得到当前状态,根据当前的状态,判断并作出行为,行为导致外部环境改变,再观测得到当前状态,周而复始。
  • 计算未来的收益期望,选择一个策略,使得对未来收益期望最大化。

状态的值函数v(s):s代表当前状态,看到目前的状态就判断是否能赢

行为的值函数Q(s, a):s代表当前状态,a代表下一步行为,经验

强化学习主要分为两个学派:策略流派(policy optimization)和价值流派(dynamic programming)

TD更新:时间差分算法更新,用下一步的状态更新当前一步的状态值,S(t) = R(t) + k*S(t+1),其中k为衰减函数,R(t)为当前一步状态的奖励值。

解决局部最优问题:加入随机性,使得可以有机会突破局部最优,并走到全局最优点,Q学习。

强化学习第三层:探索无限空间的问题 

世界模型:利用神经网络在强化学习中加入想象,深度强化学习。
  • 用神经网路预测环境(状态)的变化[S(t)-->S(t+1)],再用强化学习基于S(t+1)计算值函数,预测在该新环境(状态)下的行为,然后不断重复上述步骤。
  • 例如围棋:机器下第一步棋之后,用神经网络想象对手下一步棋(想象新状态),然后基于想象出的对手的下一步棋(新状态),利用强化学习得出自己的棋路,不断重复,直至达到棋局终点。类似于人类在脑海中想象对方的棋路以及我方的应对措施。

 

你可能感兴趣的:(人工智能,Python,机器学习,神经网络,自然语言处理)