人工智能三大学派
人工智能自1956年正式提出,发展期间,作为一门交叉学科,不同学科背景的学者对人工智能做出了不同的理解,并提出了各自的方法,主要被分为三大学派——符号主义,连接主义,行为主义。
符号主义
人工智能发展早期遵循符号主义学派的路径,符号主义学派认为人工智能源于数学逻辑,其实质是模拟人的抽象逻辑思维,通过研究人类认知系统的功能机理,用某种符号来描述人类的认知过程,并把这种符号输入到能处理符号的计算机中,从而模拟人类的认知过程,实现人工智能。符号主义历经启发式算法->专家系统->知识工程理论与技术的发展过程,并在20世纪80年代取得很大发展。由于狭窄的应用领域让它在短暂的辉煌后沉寂。
连接主义
连接主义学派吸取符号主义学派教训,以工程技术手段模拟人脑神经系统的结构和功能。这种思路在一定程度上实现人脑形象思维,它从神经元开始进而研究神经网络模型和脑模型,开辟了人工智能的又一发展道路。20世纪60~70年代,连接主义,尤其是对以感知机(perceptron)为代表的脑模型的研究出现过热潮,由于受到当时的理论模型、生物原型和技术条件的限制,脑模型研究在20世纪70年代后期至80年代初期落入低潮。直到Hopfield教授在1982年和1984年发表两篇重要论文,提出用硬件模拟神经网络以后,连接主义才又重新抬头。1986年,鲁梅尔哈特(Rumelhart)等人提出多层网络中的反向传播算法(BP)算法。此后,连接主义势头大振,从模型到算法,从理论分析到工程实现,为神经网络计算机走向市场打下基础。
行为主义
行为主义最早来源于20世纪初的一个心理学流派,认为行为是有机体用以适应环境变化的各种身体反应的组合,它的理论目标在于预见和控制行为,这一学派的代表作者首推布鲁克斯(Brooks)的六足行走机器人,它被看作是新一代的“控制论动物”,是一个基于感知-动作模式模拟昆虫行为的控制系统。
我们学习人工智能时,并没有刻意区分学派,将三大学派的知识熔为一体,即可谓“统一人工智能”,
机器学习
机器学习的定义
机器学习中存在多种学派,机器学习利用计算手段,用经验来改善系统自身的性能,“经验”通常以“数据”形式存在,机器学习所研究的主要内容,即“学习算法”。有了学习算法,我们把将经验数据提供给他,他就能基于数据产生模型,这个过程即为训练过程,在面对新的情况时,我们为模型输入数据,模型输出结果,即为预测。
机器学习一般处理过程
机器学习的目的是使学得的模型能够适用于新样本,我们希望学习的模型对于没有在训练集中出现的样本,依然具有准确的预测值,这种学得模型适用于新样本的能力称为“泛化能力”。为了得到一个针对具体问题有很强泛化能力的模型,我们首先应该定义问题的类型,根据经验和对数据的分析,初步挑选合适的模型或者适合的若干模型,在训练之前,我们应该对数据进行清洗,去掉重复的数据,补全缺失的数据,统一数据的格式,挑选特征,数据标椎化和归一化(这一过程可以归结为三步:数据预处理,特征选择,降维,统称为特征工程)。数据处理好后,即可以使用选择好的模型对数据进行训练——模型可以根据输入数据得到吻合输出数据的结果,也就是寻找使模型能对特定的问题进行预测的参数的过程,训练好的模型需要接受新的数据集的检验,获取模型的正确率和各种评判模型好坏的参数(如偏差、方差、查准率、查准率),最后挑选最佳模型,并进行优化。
1.问题的定义
当我们决定用机器学习技术来解决问题时,我们应该判断问题的类型,大体上,我们将问题分为监督学习或无监督学习,监督学习带有数据标签,即数据包含输入和输出,假设输入为x_train,输出为y_train,若选择线性回归模型
f
(
x
)
=
w
t
x
=
∑
i
=
0
N
w
i
x
i
,
其
中
w
=
(
θ
1
,
θ
2
,
θ
3
,
,
,
θ
i
)
,
x
=
(
x
1
,
x
2
,
x
3
,
,
x
i
)
f(x)= w^tx=\sum_{i=0}^Nw_ix_i , 其中w=(\theta_1,\theta_2,\theta_3,,,\theta_i),x=(x1,x2,x3,,x_i)
f(x)=wtx=i=0∑Nwixi,其中w=(θ1,θ2,θ3,,,θi),x=(x1,x2,x3,,xi)
∃
\exists
∃w,使得`
y
t
r
a
i
n
=
w
t
x
t
r
a
i
n
y_{train}=w^tx_{train}
ytrain=wtxtrain
训练参数w(使用数学方法,寻找参数w),使得模型能拟合数据集,即为模型训练过程。
特别地,当标签y_train的值是连续的,处理问题为回归问题,如房价预测问题,输入数据的特征包括地段,楼层,居室,面积,输出为房价的预测值;当标签y_train的值是离散值,处理的问题即为分类问题,如文本分类问题,输入为word2vec的向量,输出为文本的类别,属于新闻类或娱乐类。
无监督学习不具有数据标签,对于输入的数据x_tain,选择模型,能将数据样本划分为cluster1,cluster2,clusteri。无监督学习主要处理问题即为聚类,如给定若干花朵特征数据,使用聚类模型将花朵分为若干种花(如牵牛花,玫瑰花,紫荆花等)。
2.模型的选择
根据问题的定义选择合适的模型,模型的合理性很大程度上取决于待解决问题本身的特征;模型的复杂度需要和问题的复杂度相同(数据的特征少,选择较简单的模型,数据的特征达到万维或更多,简单的模型无法很好的拟合数据集,可以考虑使用神经网络等模型)。
选取模型可以参考两个基本的准则:无免费的午餐原理(No Free Lunch Theorem)和奥卡姆剃刀(Occam's Razor)原则.
NFL定理:对于任意的学习算法
ξ
a
\xi_a
ξa和
ξ
b
\xi_b
ξb,无论算法简单或复杂,算法
ξ
a
\xi_a
ξa在某一问题上比算法
ξ
b
\xi_b
ξb的预测性能好,那么必有在另一问题上,
ξ
a
\xi_a
ξa在这一问题上比算法
ξ
b
\xi_b
ξb性能差。算法在所有问题上的期望是相同的。
但有一个重要前提:所有“问题”出现的机会相同、或所有的问题同等重要。NFL 定理最重要的指导意义在于先验知识的使用,也就是具体问题具体分析,同样用于分类的算法,逻辑回归和朴素贝叶斯分类器在不同问题上的表现不同。
奥卡姆的剃刀(Occam’Razor):在不同模型得到的结果大致相同的情况下,模型越简单越好。
通常过于简单的模型对于数据特征的学习效率不太好,梨能判断成苹果,偏差较高(预测值的期望和真实结果的区别),由于对于特征学习不够精确,把所有和苹果相似的其他水果都能判断成苹果,因而,方差较小(模型预测值本身的波动较小),容易欠拟合。
对于过于复杂的算法,对于数据集的特征学习程度过高,能够对数据集的数据做出精准的预测,但有可能学习过头,将数据的某些特征视为必须的充分条件,如苹果必须是红的。模型复杂度高,方差较高。
挑选模型就是选择低方差和低偏差的模型。
3.特征工程
数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。
参考:https://www.zhihu.com/question/29316149
4.模型训练(寻找参数)
以线性回归模型为例,寻找参数,即为找到
Y
t
r
a
i
n
=
W
t
X
t
r
a
i
n
Y_train = W^tX_train
Ytrain=WtXtrain,当数据集比较大时,使用人手动解方程,求方程的方式显然费时费力,但能想到,我们求解的参数需要满足
L
(
x
)
=
(
f
(
X
t
r
a
i
n
)
−
Y
t
r
a
i
n
)
2
L(x)=\left(f( X_{train})-Y_{train}\right)^2
L(x)=(f(Xtrain)−Ytrain)2( 假设模型为f(x)), 寻找的参数
w
i
w_i
wi,应使L(x)减小,即
f
(
x
t
r
a
i
n
)
f(x_{train})
f(xtrain)和
y
t
r
a
i
n
y_{train}
ytrain接近,这里的损失函数L(x)为均方误差,寻找参数
W
−
i
W-i
W−i的过程使均方误差取得最小值的过程,表达式可写为:
w
∗
=
a
r
g
m
i
n
∑
k
=
1
(
w
t
x
k
−
y
k
)
2
w^*= {argmin}\sum_{k=1}(w^tx_k-y_k)^2
w∗=argmink=1∑(wtxk−yk)2
在单变量线性回归任务中,最小二乘法的作用就是找到一条直线,使所有样本到直线的欧式距离追小。
最小二乘法的推导:
假设一元线性回归模型:
f
(
x
i
)
=
w
x
i
+
b
f(x_i)=wx_i+b
f(xi)=wxi+b,
L
(
x
)
=
∑
i
=
1
N
(
y
i
−
w
i
−
b
)
2
L(x)= \sum_{i=1}^N(y_i - w_i -b)^2
L(x)=i=1∑N(yi−wi−b)2
对函数求偏导并令其为零,有
∂
l
∂
w
=
0
\frac{\partial_l}{\partial_w}=0
∂w∂l=0,
∂
l
∂
b
=
0
\frac{\partial_l}{\partial_b}=0
∂b∂l=0,即
∂
l
∂
w
=
2
(
w
∑
i
=
1
N
x
i
2
−
∑
i
=
1
N
(
y
i
−
b
)
x
i
)
\frac{\partial_l}{\partial_w}=2(w\sum_{i=1}^Nx_i^2-\sum_{i=1}^N(y_i-b)x_i)
∂w∂l=2(wi=1∑Nxi2−i=1∑N(yi−b)xi)
∂
l
∂
b
=
2
(
m
b
−
∑
i
=
1
N
(
y
i
−
w
x
i
)
)
\frac{\partial_l}{\partial_b}=2(mb-\sum_{i=1}^N(y_i-wx_i))
∂b∂l=2(mb−i=1∑N(yi−wxi))
解得:
w
=
∑
i
=
1
N
(
x
i
−
x
⃗
)
∑
i
=
1
N
x
i
2
−
1
N
(
∑
i
=
1
N
x
i
)
2
w=\frac{\sum_{i=1}^N(x_i-\vec x)}{\sum_{i=1}^Nx_i^2-\frac{1}{N}(\sum_{i=1}^Nx_i)^2}
w=∑i=1Nxi2−N1(∑i=1Nxi)2∑i=1N(xi−x)
b
=
1
N
∑
i
=
1
N
(
y
i
−
b
)
x
i
b=\frac{1}{N}\sum_{i=1}^N(y_i-b)x_i
b=N1i=1∑N(yi−b)xi
其中,
x
⃗
=
1
N
∑
i
=
1
N
x
i
\vec x=\frac{1}{N}\sum_{i=1}^Nx_i
x=N1∑i=1Nxi
使用最小二乘法求模型的程序示例:
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
x = [2,4,6,7,9,12]
y = [23,34,54,60,78,87]
y_mean = np.sum(y)/np.size(y)
x_mean = np.sum(x)/np.size(x)
square = np.sum([x*x for x in x]);
def get_w(X,Y,x_mean):
square = np.sum([x*x for x in X]);
up_sum = 0;
lower_sum = 0;
for i in range(np.size(X)):
x = X[i]
y = Y[i]
up_sum += y*(x - x_mean)
size = np.size(X);
sum_2 = np.sum(X)*np.sum(X)
lower_sum = square - sum_2/size
w = up_sum/lower_sum
return w;
def get_b(X,Y,w):
b = 0
for i in range(np.size(X)):
x = X[i]
y = Y[i]
b+= y - w*x
b = b/np.size(X)
return b
w = np.abs(get_w(x,y,x_mean))
b = get_b(x,y,w)
y_result = [w*x+b for x in x]
plt.figure(figsize = (10,10))
plt.scatter(x,y)
plt.plot(x,y_result)
![](https://i-blog.csdnimg.cn/blog_migrate/9a1b989472c6333b293fdd129fbdef2f.png)
对于多元线性回归模型,样本由多个属性描述,可推导多元线性回归的最小二乘法最优参数为:
ω
∗
=
(
X
T
X
)
−
1
X
T
y
\omega^*=(X^TX)^{-1}X^Ty
ω∗=(XTX)−1XTy
其中,X是由所有样本x=(x_0,x_1,x_2,x_3)的转置共同构成的矩阵,当
(
X
T
X
)
(X^TX)
(XTX)的逆矩阵存在时成立。
因而,最小二乘法并不是所有时候都能用于寻找参数w,在寻找参数w的方法中,使用梯度下降法更为普遍:
梯度下降法分为两步:
(1)初始化
θ
\theta
θ,(参数
w
T
=
(
θ
0
,
θ
1
,
,
,
θ
n
)
w^T=(\theta_0,\theta_1,,,\theta_n)
wT=(θ0,θ1,,,θn))
(2) 迭代循环执行如下公式:
θ
i
=
θ
i
−
α
∂
l
o
s
s
(
θ
)
∂
θ
\theta_i = \theta_i - \alpha\frac{\partial{loss(\theta)}}{\partial\theta}
θi=θi−α∂θ∂loss(θ)
其中,
∂
l
o
s
s
(
θ
)
∂
θ
=
1
m
∑
i
=
1
m
(
h
θ
(
x
)
−
y
)
2
\frac{\partial{loss(\theta)}}{\partial\theta}=\frac{1}{m}\sum_{i=1}^{m}(h_\theta(x)-y)^2
∂θ∂loss(θ)=m1i=1∑m(hθ(x)−y)2
h
(
θ
)
=
w
T
∗
x
=
θ
0
∗
b
+
θ
1
∗
x
1
+
…
…
+
θ
n
∗
x
n
h(\theta)=w^T*x=\theta_0*b+\theta_1*x_1+……+\theta_n*x_n
h(θ)=wT∗x=θ0∗b+θ1∗x1+……+θn∗xn
梯度下降法应注意步长
α
\alpha
α的选取,取得过小会导致收敛速度过慢,过大则损失函数可能不会收敛,甚至逐渐变大 。
![](https://i-blog.csdnimg.cn/blog_migrate/4fdfb60ecca2c0080879dc669fb32a0e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/eefa62ce105cd2a972092e6d27e02928.png)
梯度下降法图片、代码参考:https://blog.csdn.net/zgcr654321/article/details/84963384
参考文献:
《人工智能及其应用(第3版)》
《机器学习》 周志华著
《统计学习方法》 李航著
《裂变:秒懂人工智能的基础课》 王天一著
《机器学习40讲》 极客时间——王天一