自学人工智能时记下的笔记系列(1)
先了解了人工智能思想的发展流程。在平时提及人工智能总是伴随着很多新概念和新名词,比如机器学习、深度学习、卷积、RNN、CNN、强化学习等等,很容易就绕晕在了。所以,第一步显示厘清人工智能涵盖的范围、各个概念之间关系、目前的发展情况等。初学的话基本不涉及公式和算法。
1)机器学习角度1--专家系统
专家系统:基于行业专家提供的解决问题的既定规则,由系统自动执行判断和操作。
专家系统的局限:实际问题数不胜数,出现无法预知的新情况,无法描述的隐性规则(例如没有清晰明确的判断规则)。
2)机器学习角度2:基于符号推理的系统vs基于概率推理的系统
按照人类的逻辑学习知识。归纳和推演
基于符号和概率的推理还是基于人类已知知识。比如:10岁上学的孩子经常买文具,小明是一个10岁上学的孩子,所以买文具的概率很大。
3)机器学习角度3:学习人类如何学习,模拟人类的思维,仿生学习方法:联结主义、进化算法、强化学习
3.1)连结主义:机器模拟人脑神经元的连接模式进行学习。Hebb Law, 学习是改变连接。
例如:从生理上,狗看到食物会分泌唾液。给狗喂食的时候同时摇铃,按这种模式训练(学习)一段时间后,以后会发现只摇铃狗也会分泌唾液。但如果持续一段时间的只摇铃不喂食,狗慢慢也不会分泌唾液。
一波三折的连结主义:
3.2)进化算法:模拟生物进化学习,比如竞争、自然选择的规则
有一个基因(规则)池子,进行竞争,竞争中的获胜者可以加强自身基因(规则),最终胜利者的基因(规则)通吃,失败者的基因(规则)被淘汰
适用于当有很大不确定行的时候,是一种破坏性创新算法
3.3)强化学习:延迟满足,行为反馈,通过对行为结果的反馈进行学习,进而调整行为。
机器学习的主要方法
(一)线性回归
线性模型: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. 概率-朴素贝叶斯
属于监督学习
朴素贝叶斯:
当特征太多时,可以考虑用朴素贝叶斯。
文章分类,用关键词,可以使用朴素贝叶斯。
文章分类的步骤:已知某类文章(比如宗教类文章)中关键词A(例如god)出现的概率,以及某篇未分类文章X中该关键词A(god)的出现概率,则可以对文章X进行分类(是否宗教类)。
3. 决策树(最常用的分类方法)
是最接近人类决策的思路;由一串问题组成,每个问题都能将数据划分出符合及不符合两类,最终符合所有问题答案的数据点,则为最终选择的结果。
比如,让计算机猜心中所想的任一人物。
(三)降维 Dimension Reduction
属于无监督学习
常用于剔除冗余特征。比如将数据中的8个特征减少至更少的特征。可以用于减少过拟合的情况。
比如,在房价分析案例中,可以用降维剔除一些冗余特征,比如一般房屋面积越大,车库面积就越大,所以当既有房屋面积又有车库面积这两个特征时,车库数量对于房价预测是冗余的,可以剔除。
如何降维:PCA( Principle Compoent Analysis)
(四)聚类 Cluster
属于无监督学习
将数据根据某种特定的假设进行分堆。
比如,将数据放在坐标轴上,发现不同组数据之间的距离不一样,有一部分数据聚在一起,另一部分距离聚在一起,这两部分数据之间距离较大,则可以将数据分堆。
三大类神经网络:
自编码器:深度学习鼻祖,可以自动剔除噪音,获取最本质的特征。
推荐文章: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出现的概率更高。例如“我爱”之后出现“你”的概率比较高,出现”一“的概率就比较小,而”我爱你“之后出现”们“的概率会升高,比单独出现”们“的概率要高。
根据单词出现概率判断,符合概率连乘:
N-gram:表示每个单词出现的概率受前面n-1个单词的共同影响。
2. RNN (Recurrent Neural Network)
通过循环(回声)创造记忆。可以根据之前的文字\单词预测或生成下一个文字\单词
将前序神经元中间层h(t-1)的信息传给下一个神经元的中间层h(t)
#极简版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
RNN也可以理解为一个自动编码器,即RNN通过学习可以生成一个程序P,使得输入信息x变为输出信息y。
用RNN生成诗词:
3. LSTM
LSTM:为解决RNN随时间衰减的问题,有记忆更长时间尺度的能力。
LSTM具体公式如下:
强化学习:延迟满足,在不断尝试中根据结果调整后续行为。
强化学习(reinforced)与监督学习(supervised)的区别:给一张老虎的图片,通过监督学习得到结果“老虎”,根据图片得到固定的概念;通过强化学习得到结果“逃跑”,根据图片得出下一步行为。
强化学习框架:
强化学习第一层:不确定性下的决策
强化学习第二层:奖励是未来的,平衡当下与未来
状态的值函数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学习。
强化学习第三层:探索无限空间的问题