机器 – 庄闲棋牌官网官方版 -199IT
//www.otias-ub.com 发现数据的价值-199IT Thu, 04 Jul 2019 03:18:07 +0000 zh-CN hourly 1 https://wordpress.org/?v=5.4.2 机器学习算法一览(附python和R代码)
//www.otias-ub.com/archives/465580.html Sun, 24 Apr 2016 08:44:55 +0000 //www.otias-ub.com/?p=465580 “谷歌的无人车和机器人得到了很多关注,但我们真正的未来却在于能够使电脑变得更聪明,更人性化的技术,机器学习。 ”

—— 埃里克 施密特(谷歌首席执行官)

当计算从大型计算机转移至个人电脑再转移到云的今天,我们可能正处于人类历史上最关键的时期。之所以关键,并不是因为已经取得的成就,而是未来几年里我们即将要获得的进步和成就。

对我来说,如今最令我激动的就是计算技术和工具的普及,从而带来了计算的春天。作为一名数据科学家,我可以建造一个数据处理系统来进行复杂的算法运算,这样每小时能赚几美金。可是学习这些算法却花了我无数个日日夜夜。

那么谁能从这篇文章里收益最多呢?

这篇文章有可能是我写的所有文章里最有价值的一篇。

写这篇文章的目的,就是希望它可以让有志于从事数据科学和机器学习的诸位在学习算法的路上少走些路。我会在文章中举例一些机器学习的问题,你们也可以在思考解决这些问题的过程中得到启发。我也会写下对于各种机器学习算法的一些个人理解,并且提供R和Python的执行代码。读完这篇文章,读者们至少可以行动起来亲手试试写一个机器学习的程序。

不过,这篇文章并没有阐述这些算法背后的统计学原理,有时候从实践入手也是很好的学习路径。如果你希望了解的是这些统计学原理,那么这篇文章的内容可能并不适合你。

一般说来,机器学习有三种算法:

1. 监督式学习

监督式学习算法包括一个目标变量(因变量)和用来预测目标变量的预测变量(自变量)。通过这些变量我们可以搭建一个模型,从而对于一个已知的预测变量值,我们可以得到对应的目标变量值。重复训练这个模型,直到它能在训练数据集上达到预定的准确度。

属于监督式学习的算法有:回归模型,决策树,随机森林,K邻近算法,逻辑回归等。

2. 无监督式学习

与监督式学习不同的是,无监督学习中我们没有需要预测或估计的目标变量。无监督式学习是用来对总体对象进行分类的。它在根据某一指标将客户分类上有广泛应用。

属于无监督式学习的算法有:关联规则,K-means聚类算法等。

3. 强化学习

这个算法可以训练程序做出某一决定。程序在某一情况下尝试所有的可能行动,记录不同行动的结果并试着找出最好的一次尝试来做决定。

属于这一类算法的有马尔可夫决策过程。

常见的机器学习算法

以下是最常用的机器学习算法,大部分数据问题都可以通过它们解决:

1.线性回归 (Linear Regression)

2.逻辑回归 (Logistic Regression)

3.决策树 (Decision Tree)

4.支持向量机(SVM)

5.朴素贝叶斯 (Naive Bayes)

6.K邻近算法(KNN)

7.K-均值算法(K-means)

8.随机森林 (Random Forest)

9.降低维度算法(Dimensionality Reduction Algorithms)

10.Gradient Boost和Adaboost算法

1.线性回归 (Linear Regression)

线性回归是利用连续性变量来估计实际数值(例如房价,呼叫次数和总销售额等)。我们通过线性回归算法找出自变量和因变量间的最佳线性关系,图形上可以确定一条最佳直线。这条最佳直线就是回归线。这个回归关系可以用Y=aX+b 表示。

我们可以假想一个场景来理解线性回归。比如你让一个五年级的孩子在不问同学具体体重多少的情况下,把班上的同学按照体重从轻到重排队。这个孩子会怎么做呢?他有可能会通过观察大家的身高和体格来排队。这就是线性回归!这个孩子其实是认为身高和体格与人的体重有某种相关。而这个关系就像是前一段的Y和X的关系。

在Y=aX+b这个公式里:

Y- 因变量

a- 斜率

X- 自变量

b- 截距

a和b可以通过最小化因变量误差的平方和得到(最小二乘法)。

下图中我们得到的线性回归方程是 y=0.2811X+13.9。通过这个方程,我们可以根据一个人的身高得到他的体重信息。

  线性回归主要有两种:一元线性回归和多元线性回归。一元线性回归只有一个自变量,而多元线性回归有多个自变量。拟合多元线性回归的时候,可以利用多项式回归(Polynomial Regression)或曲线回归 (Curvilinear Regression)。

Python 代码

#Import Library

#Import other necessary libraries like pandas, numpy…

fromsklearn importlinear_model

#Load Train and Test datasets

#Identify feature and response variable(s) and values must be numeric and numpy arrays

x_train=input_variables_values_training_datasets

y_train=target_variables_values_training_datasets

x_test=input_variables_values_test_datasets

# Create linear regression object

linear =linear_model.LinearRegression()

# Train the model using the training sets and check score

linear.fit(x_train,y_train)

linear.score(x_train,y_train)

#Equation coefficient and Intercept

print(‘Coefficient: \n’,linear.coef_)

print(‘Intercept: \n’,linear.intercept_)

#Predict Output

predicted=linear.predict(x_test)

R 代码

#Load Train and Test datasets

#Identify feature and response variable(s) and values must be numeric and numpy arrays

x_train <-input_variables_values_training_datasets

y_train <-target_variables_values_training_datasets

x_test <-input_variables_values_test_datasets

x <-cbind(x_train,y_train)

# Train the model using the training sets and check score

linear <-lm(y_train ~.,data =x)

summary(linear)

#Predict Output

predicted=predict(linear,x_test)

2.逻辑回归

别被它的名字迷惑了,逻辑回归其实是一个分类算法而不是回归算法。通常是利用已知的自变量来预测一个离散型因变量的值(像二进制值0/1,是/否,真/假)。简单来说,它就是通过拟合一个逻辑函数(logit fuction)来预测一个事件发生的概率。所以它预测的是一个概率值,自然,它的输出值应该在0到1之间。

同样,我们可以用一个例子来理解这个算法。

假设你的一个朋友让你回答一道题。可能的结果只有两种:你答对了或没有答对。为了研究你最擅长的题目领域,你做了各种领域的题目。那么这个研究的结果可能是这样的:如果是一道十年级的三角函数题,你有70%的可能性能解出它。但如果是一道五年级的历史题,你会的概率可能只有30%。逻辑回归就是给你这样的概率结果。

回到数学上,事件结果的胜算对数(log odds)可以用预测变量的线性组合来描述:

odds= p/ (1-p) = probability of event occurrence / probability of not event occurrence

ln(odds) = ln(p/(1-p))

logit(p) = ln(p/(1-p)) = b0+b1X1+b2X2+b3X3….+bkXk

在这里,p 是我们感兴趣的事件出现的概率。它通过筛选出特定参数值使得观察到的样本值出现的概率最大化,来估计参数,而不是像普通回归那样最小化误差的平方和。

你可能会问为什么需要做对数呢?简单来说这是重复阶梯函数的最佳方法。因本篇文章旨不在此,这方面就不做详细介绍了。

  Python 代码

  #Import Library

fromsklearn.linear_model importLogisticRegression

#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset

# Create logistic regression object

model =LogisticRegression()

# Train the model using the training sets and check score

model.fit(X,y)

model.score(X,y)

#Equation coefficient and Intercept

print(‘Coefficient: \n’,model.coef_)

print(‘Intercept: \n’,model.intercept_)

#Predict Output

predicted=model.predict(x_test)

R 代码

x <-cbind(x_train,y_train)

# Train the model using the training sets and check score

logistic <-glm(y_train ~.,data =x,family=’binomial’)

summary(logistic)

#Predict Output

predicted=predict(logistic,x_test)

延伸

以下是一些可以尝试的优化模型的方法:

加入交互项(interaction)

减少特征变量

正则化(regularization)

使用非线性模型

3.决策树

这是我最喜欢也是能经常使用到的算法。它属于监督式学习,常用来解决分类问题。令人惊讶的是,它既可以运用于类别变量(categorical variables)也可以作用于连续变量。这个算法可以让我们把一个总体分为两个或多个群组。分组根据能够区分总体的最重要的特征变量/自变量进行。更详细的内容可以阅读这篇文章Decision Tree Simplified。

  从上图中我们可以看出,总体人群最终在玩与否的事件上被分成了四个群组。而分组是依据一些特征变量实现的。用来分组的具体指标有很多,比如Gini,information Gain, Chi-square,entropy。

理解决策树原理的最好的办法就是玩Jezzball游戏。这是微软的一款经典游戏(见下图)。这个游戏的最终任务是在一个有移动墙壁的房间里,通过建造墙壁来尽可能地将房间分成尽量大的,没有小球的空间。

  每一次你用建墙来分割房间,其实就是在将一个总体分成两部分。决策树也是用类似方法将总体分成尽量多的不同组别。

延伸阅读:Simplified Version of Decision Tree Algorithms

Python 代码

#Import Library

#Import other necessary libraries like pandas, numpy…

fromsklearn importtree

#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset

# Create tree object

model =tree.DecisionTreeClassifier(criterion=’gini’)# for classification, here you can change the algorithm as gini or entropy (information gain) by default it is gini

# model = tree.DecisionTreeRegressor() for regression

# Train the model using the training sets and check score

model.fit(X,y)

model.score(X,y)

#Predict Output

predicted=model.predict(x_test)

R 代码

library(rpart)

x <-cbind(x_train,y_train)

# grow tree

fit <-rpart(y_train ~.,data =x,method=”class”)

summary(fit)

#Predict Output

predicted=predict(fit,x_test)

4. 支持向量机(SVM)

这是一个分类算法。在这个算法中我们将每一个数据作为一个点在一个n维空间上作图(n是特征数),每一个特征值就代表对应坐标值的大小。比如说我们有两个特征:一个人的身高和发长。我们可以将这两个变量在一个二维空间上作图,图上的每个点都有两个坐标值(这些坐标轴也叫做支持向量)。

  现在我们要在图中找到一条直线能最大程度将不同组的点分开。两组数据中距离这条线最近的点到这条线的距离都应该是最远的。

  在上图中,黑色的线就是最佳分割线。因为这条线到两组中距它最近的点,点A和B的距离都是最远的。任何其他线必然会使得到其中一个点的距离比这个距离近。这样根据数据点分布在这条线的哪一边,我们就可以将数据归类。

更多阅读:Simplified Version of Support Vector Machine

我们可以把这个算法想成n维空间里的JezzBall游戏,不过有一些变动:

你可以以任何角度画分割线/分割面(经典游戏中只有垂直和水平方向)。

现在这个游戏的目的是把不同颜色的小球分到不同空间里。

小球是不动的。

Python 代码

#Import Library

fromsklearn importsvm

#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset

# Create SVM classification object

model =svm.svc()# there is various option associated with it, this is simple for classification. You can refer link, for mo# re detail.

# Train the model using the training sets and check score

model.fit(X,y)

model.score(X,y)

#Predict Output

predicted=model.predict(x_test)

R 代码

library(e1071)

x <-cbind(x_train,y_train)

# Fitting model

fit <-svm(y_train ~.,data =x)

summary(fit)

#Predict Output

predicted=predict(fit,x_test)

5. 朴素贝叶斯

这个算法是建立在贝叶斯理论上的分类方法。它的假设条件是自变量之间相互独立。简言之,朴素贝叶斯假定某一特征的出现与其它特征无关。比如说,如果一个水果它是红色的,圆状的,直径大概7cm左右,我们可能猜测它为苹果。即使这些特征之间存在一定关系,在朴素贝叶斯算法中我们都认为红色,圆状和直径在判断一个水果是苹果的可能性上是相互独立的。

朴素贝叶斯的模型易于建造,并且在分析大量数据问题时效率很高。虽然模型简单,但很多情况下工作得比非常复杂的分类方法还要好。

贝叶斯理论告诉我们如何从先验概率P(c),P(x)和条件概率P(x|c)中计算后验概率P(c|x)。算法如下:

  P(c|x)是已知特征x而分类为c的后验概率。

  P(c)是种类c的先验概率。

P(x|c)是种类c具有特征x的可能性。

P(x)是特征x的先验概率。

例子: 以下这组训练集包括了天气变量和目标变量“是否出去玩”。我们现在需要根据天气情况将人们分为两组:玩或不玩。整个过程按照如下步骤进行:

步骤1:根据已知数据做频率表

步骤2:计算各个情况的概率制作概率表。比如阴天(Overcast)的概率为0.29,此时玩的概率为0.64.

  步骤3:用朴素贝叶斯计算每种天气情况下玩和不玩的后验概率。概率大的结果为预测值。

提问: 天气晴朗的情况下(sunny),人们会玩。这句陈述是否正确?

我们可以用上述方法回答这个问题。P(Yes | Sunny)=P(Sunny | Yes) * P(Yes) / P(Sunny)。

这里,P(Sunny |Yes) = 3/9 = 0.33, P(Sunny) = 5/14 = 0.36, P(Yes)= 9/14 = 0.64。

那么,P (Yes | Sunny) = 0.33 * 0.64 / 0.36 = 0.60>0.5,说明这个概率值更大。

当有多种类别和多种特征时,预测的方法相似。朴素贝叶斯通常用于文本分类和多类别分类问题。

Python 代码

#Import Library

fromsklearn.naive_bayes importGaussianNB

#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset

# Create SVM classification object model = GaussianNB() # there is other distribution for multinomial classes like Bernoulli Naive Bayes, Refer link

# Train the model using the training sets and check score

model.fit(X,y)

#Predict Output

predicted=model.predict(x_test)

R 代码

library(e1071)

x <-cbind(x_train,y_train)

# Fitting model

fit <-naiveBayes(y_train ~.,data =x)

summary(fit)

#Predict Output

predicted=predict(fit,x_test)

6.KNN(K-邻近算法)

这个算法既可以解决分类问题,也可以用于回归问题,但工业上用于分类的情况更多。 KNN先记录所有已知数据,再利用一个距离函数,找出已知数据中距离未知事件最近的K组数据,最后按照这K组数据里最常见的类别预测该事件。

距离函数可以是欧式距离,曼哈顿距离,闵氏距离 (Minkowski Distance), 和汉明距离(Hamming Distance)。前三种用于连续变量,汉明距离用于分类变量。如果K=1,那问题就简化为根据最近的数据分类。K值的选取时常是KNN建模里的关键。

  KNN在生活中的运用很多。比如,如果你想了解一个不认识的人,你可能就会从这个人的好朋友和圈子中了解他的信息。

在用KNN前你需要考虑到:

KNN的计算成本很高

所有特征应该标准化数量级,否则数量级大的特征在计算距离上会有偏移。

在进行KNN前预处理数据,例如去除异常值,噪音等。

Python 代码

#Import Library

fromsklearn.neighbors importKNeighborsClassifier

#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset

# Create KNeighbors classifier object model

KNeighborsClassifier(n_neighbors=6)# default value for n_neighbors is 5

# Train the model using the training sets and check score

model.fit(X,y)

#Predict Output

predicted=model.predict(x_test)

R 代码

library(knn)

x <-cbind(x_train,y_train)

# Fitting model

fit <-knn(y_train ~.,data =x,k=5)

summary(fit)

#Predict Output

predicted=predict(fit,x_test)

7. K均值算法(K-Means)

这是一种解决聚类问题的非监督式学习算法。这个方法简单地利用了一定数量的集群(假设K个集群)对给定数据进行分类。同一集群内的数据点是同类的,不同集群的数据点不同类。

还记得你是怎样从墨水渍中辨认形状的么?K均值算法的过程类似,你也要通过观察集群形状和分布来判断集群数量!

  K均值算法如何划分集群:

  从每个集群中选取K个数据点作为质心(centroids)。

将每一个数据点与距离自己最近的质心划分在同一集群,即生成K个新集群。

找出新集群的质心,这样就有了新的质心。

重复2和3,直到结果收敛,即不再有新的质心出现。

怎样确定K的值:

如果我们在每个集群中计算集群中所有点到质心的距离平方和,再将不同集群的距离平方和相加,我们就得到了这个集群方案的总平方和。

我们知道,随着集群数量的增加,总平方和会减少。但是如果用总平方和对K作图,你会发现在某个K值之前总平方和急速减少,但在这个K值之后减少的幅度大大降低,这个值就是最佳的集群数。

  Python 代码

  #Import Library

fromsklearn.cluster importKMeans

#Assumed you have, X (attributes) for training data set and x_test(attributes) of test_dataset

# Create KNeighbors classifier object model

k_means =KMeans(n_clusters=3,random_state=0)

# Train the model using the training sets and check score

model.fit(X)

#Predict Output

predicted=model.predict(x_test)

R 代码

library(cluster)

fit <-kmeans(X,3)# 5 cluster solution

8.随机森林

随机森林是对决策树集合的特有名称。随机森林里我们有多个决策树(所以叫“森林”)。为了给一个新的观察值分类,根据它的特征,每一个决策树都会给出一个分类。随机森林算法选出投票最多的分类作为分类结果。

怎样生成决策树:

如果训练集中有N种类别,则有重复地随机选取N个样本。这些样本将组成培养决策树的训练集。

如果有M个特征变量,那么选取数m <<M,从而在每个节点上随机选取m个特征变量来分割该节点。m在整个森林养成中保持不变。

每个决策树都最大程度上进行分割,没有剪枝。

比较决策树和调节模型参数可以获取更多该算法细节。我建议读者阅读这些文章:

Introduction to Random forest – Simplified

Comparing a CART model to Random Forest (Part 1)

Comparing a Random Forest to a CART model (Part 2)

Tuning the parameters of your Random Forest model

Python 代码

#Import Library

fromsklearn.ensemble importRandomForestClassifier

#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset

# Create Random Forest object

model=RandomForestClassifier()

# Train the model using the training sets and check score

model.fit(X,y)

#Predict Output

predicted=model.predict(x_test)

R 代码

library(randomForest)

x <-cbind(x_train,y_train)

# Fitting model

fit <-randomForest(Species~.,x,ntree=500)

summary(fit)

#Predict Output

predicted=predict(fit,x_test)

9.降维算法(Dimensionality Reduction Algorithms)

在过去的4-5年里,可获取的数据几乎以指数形式增长。公司/政府机构/研究组织不仅有了更多的数据来源,也获得了更多维度的数据信息。

例如:电子商务公司有了顾客更多的细节信息,像个人信息,网络浏览历史,个人喜恶,购买记录,反馈信息等,他们关注你的私人特征,比你天天去的超市里的店员更了解你。

作为一名数据科学家,我们手上的数据有非常多的特征。虽然这听起来有利于建立更强大精准的模型,但它们有时候反倒也是建模中的一大难题。怎样才能从1000或2000个变量里找到最重要的变量呢?这种情况下降维算法及其他算法,如决策树,随机森林,PCA,因子分析,相关矩阵,和缺省值比例等,就能帮我们解决难题。

进一步的了解可以阅读Beginners Guide To Learn Dimension Reduction Techniques。

Python 代码

更多信息在这里

#Import Library

fromsklearn importdecomposition

#Assumed you have training and test data set as train and test

# Create PCA obeject pca= decomposition.PCA(n_components=k) #default value of k =min(n_sample, n_features)

# For Factor analysis

#fa= decomposition.FactorAnalysis()

# Reduced the dimension of training dataset using PCA

train_reduced =pca.fit_transform(train)

#Reduced the dimension of test dataset

test_reduced =pca.transform(test)

R 代码

library(stats)

pca <-princomp(train,cor =TRUE)

train_reduced <-predict(pca,train)

test_reduced <-predict(pca,test)

10.Gradient Boosing 和 AdaBoost

GBM和AdaBoost都是在有大量数据时提高预测准确度的boosting算法。Boosting是一种集成学习方法。它通过有序结合多个较弱的分类器/估测器的估计结果来提高预测准确度。这些boosting算法在Kaggle,AV Hackthon, CrowdAnalytix等数据科学竞赛中有出色发挥。

更多阅读: Know about Gradient and AdaBoost in detail

Python 代码

#Import Library

fromsklearn.ensemble importGradientBoostingClassifier

#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset

# Create Gradient Boosting Classifier object

model=GradientBoostingClassifier(n_estimators=100,learning_rate=1.0,max_depth=1,random_state=0)

# Train the model using the training sets and check score

model.fit(X,y)

#Predict Output

predicted=model.predict(x_test)

R 代码

library(caret)

x <-cbind(x_train,y_train)

# Fitting model

fitControl <-trainControl(method =”repeatedcv”,number =4,repeats =4)

fit <-train(y ~.,data =x,method =”gbm”,trControl =fitControl,verbose =FALSE)

predicted=predict(fit,x_test,type=”prob”)[,2]

GradientBoostingClassifier 和随机森林是两种不同的boosting分类树。人们经常提问这两个算法有什么不同。

结束语

至此我相信读者对于常用的机器学习算法已经有了一定了解。写这篇文章并且提供R和Python的代码就是为了让你可以立马着手学习。动起手来去练一练吧,加深对这些算法过程的认识,运用他们,你会喜欢上机器学习的!

  编译:@酒酒

作者:大数据文摘

]]>
陈一舟:机器到底有没有慈悲之心?
//www.otias-ub.com/archives/447154.html Sat, 12 Mar 2016 15:44:04 +0000 //www.otias-ub.com/?p=447154 1457797339-7734-JXJibQZQhdH6tMtXWzCp9nI1ev2g

文/陈一舟

三个星期前,当全世界都在为引力波激动的时候,我牵头组织了一次关于引力波和相对论的学习会,到会的互联网界人士有王兴,张朝阳,雷军和李彦宏。会上除了请到的两位老师给我们讲量子力学和引力波之外,借着大家对宇宙奥秘的兴趣,我也即兴分享了一个我为某个会议准备的ppt讲稿,主题是人工智能及对人类未来的担忧。

3月10日,人机世纪大战的第二场比赛结束了,阿尔法狗再次战胜世界围棋冠军李世石,关于人工智能的讨论也越来越激烈。我们该如何看待人工智能?机器是否和人一样,有慈悲之心?我把学习会内容整理了一下,在这里和大家分享。

奇点临近

很多互联网界人士应该都看过《奇点临近》这本书。我记得李彦宏等大咖都向公众推荐了这本书。奇点临近的观点基于计算技术的摩尔定律,下图说明:

1457797375-7834-cxwvIYzPWqSt3cbZrhicgnmadj2Q

用这个图来描述每个时代的计算能力,可以看到计算技术的发展是在以指数级提高。在1960年代,一千美元能买到的计算能力相当于一只蜻蜓的计算能力,非常非常小,在2000年代,一千美元当量的计算能力已经能达到一只老鼠的大脑的计算能力,预计在2020年的时候,一千美元当量的计算能力相当于人脑的计算能力,而到2050年,一千美元可以买到相当于全人类的计算能力!

奇点临近的核心思想是,基于计算能力指数级的提高,人工智能将在不久的将来(几十年),全面超过人类。而那个时刻太阳系智能的承载将由人类大脑跨越到超级人工智能,人类在宇宙中的地位将重新界定。

本周AlphaGo的表现,我们模模糊糊的感觉到,奇点临近。

意识和智能的生物/物理学基础

我看到大家在讨论AlphaGo时,也在思考我们人类和人工智能到底有什么本质的区别。一派论点认为我们很独特,我们的知觉,情感,如此复杂和独特,机器人是永远赶不上的。两年前,我有过类似想法,但是最近一年,随着对人工智能的思考加深,我改变了看法。

首先,知觉和情感不是人类所独有,地球上的很多生物都有。灵长类动物和海豚之类比较聪明的动物,它们应该具有某种知觉。最近有一项研究显示,连乌贼这种软体动物,也可能有知觉。试验表明,刚醒来的乌贼脑电波会有明显的变化,就像人类醒来时脑电波出现的变化。

1457797339-5115-sAvP4Yibp1QJqOe2h5e3I6bWIwUQ

2012年7月7日在剑桥大学纪念DNA之父弗朗西斯·克里克(Francis Crick) 的学术会议上,一群科学家联合发布了一个关于意识生理学基础的剑桥宣言。剑桥宣言最后一段大胆提出:“缺乏大脑皮层似乎不表示生物没有经历情感状态变化的能力。各种证据皆不约而同地指出:动物拥有构成意识所需的神经结构、神经化学及神经生理基础物资,以及有能力展示带有意图的行为。因此,证据充分表明人类并非唯一拥有产生意识的神经基础物资的生物。非人生物,包括所有哺乳类及鸟类、以及其他生物包括章鱼,也拥有这类神经基础物资。”

1457797339-5568-evn5CoRtzADxsRBaMNLzzosspiaA

如上图所示,过去几百万年,人脑越来越大,也越来越聪明,大脑的容量增加了两倍多。和人工智能相比,相当于CPU的计算能力的提高。思考能力显然有硬件基础,人工智能的计算能力在以指数逼近和超过人类,这是奇点临近的主要预测根据。

1457797339-4194-W2VBofF2LBndpuO27ZSY1d0MboRw

这是史上最神奇的人类大脑 — 100年前预测到引力波存在的爱因斯坦大脑。科学家对保留下来的爱因斯坦大脑进行了研究,发现他的大脑其实并不重,甚至略低于平均值,但是左半球与右半球的连接区域异常发达,同时负责抽象思维的区域异常发达,远超常人。进一步说明了智力、智能与产生智力的“硬件”的复杂性/精密性之间存在紧密的联系。人工智能除了硬件在指数提高,其软件,既认知能力,也通过机器学习算法提高非常快。

智能体的共同特点

有了上面的知识铺垫,让我们来探究本文的中心问题,机器是否有慈悲之心?让我们再补充一些知识,先看看智能的共同特点是什么。

凯文凯利在《技术需要什么》里认为如果技术也是一个有灵魂的个体,那么它需要四类东西:一是可能性,技术都想让自己的多样性变得更大,它希望增加更多的选择。第二它需要更高的效率,比如增加能量的密度。 第三技术希望增加复杂性,第四技术希望增加可进化性。

1457797339-5495-vmictqCMdGPCOLcOtZnDRib6khog

哈佛大学教授Alex Wissner-Gross认为智能应该被看作是一个物理过程,这个物理过程希望把未来的行动自由最大化,并且尽量避免在属于自己的未来中受到约束。一个囚犯为什么想越狱?他希望未来的自由最大化。年轻人拼命工作为什么?攒钱为未来打算。

这里特意把智能,技术这两个概念混淆。技术的驱使者是人类,所以技术发展当然也反应了人的主观能动性。比较有意思的是智能的热力学解释,根据Wissner-Gross,不管是基于碳基的生物智能还是基于硅的人工智能,应该都有一个热力学和哲学上的共同特点:它们消耗能量,消费信息,目的是最大化智能载体的行动自由和未来的各种可能性。

智能体之间的合作与对抗

这样看起来,智能体应该是自私的,它们都“忙着”为自己的未来打算。但为什么人类社会中存在着大量的利他行为呢?利他还是自私的问题,这和我们所关注的慈悲之心已经很接近了,所以我们来看看智能的利他行为是怎么回事。

1457797340-9858-HsqlrtiaeeYz9MkS6HyeGLiaNPlQ

人是社会化生物,人类更倾向合作。以研究蚂蚁著称的生物学家威尔森在他的《社会征服地球》一书中提出,“利他主义不是个体的自然选择,而是群体的选择”。他认为一个拥有众多愿意为了集体利益而作出贡献或为之牺牲的成员的部落将会胜过其他合作意识不那么强的部落。“社会体是在生物体个体之上的下一个主要生物学组织形式,在仅有的二十多个进化出社会体的动物进化分支线中,我们祖先处于其中一条分支上。在社会体中,超过两代以上的群体成员共同生活在一起,共同照顾幼体,进行劳动分工,且分工会让部分个体相对于其他群体成员在繁殖时处于更有利地位。”

1457797340-6931-4icE8EOnYSOZl5U1DPvtjqYSibDA

对于区别于人类的高级智能,如外星人,人们直觉上保持一种担心。比如,在谈及对外星人的探索计划时,物理学家霍金曾经这样警告过:“虽然我们不太了解外星人,但我们了解人类。纵观人类历史,人类与智力相对欠缺物种之间的接触,站在它们的角度来看,这种接触往往是场灾难,先进文明与原始技术的相遇对于落后一方来说很糟糕。文明外星人可能会比我们早数十亿年读取人类的信息。如果是这样的话,他们非常强大,看待人类也许未必有人类看待细菌那样珍视。”

本周阿尔法狗两虐李世石,大家感慨万千。昨天(3月10日),李学凌的状态是这样滴:

1457797340-8454-lOO3whOvEB5RwiccMaVDSbUfWEgA

但是,熊猫被保护起来是因为它们稀缺。试想一下“可爱”的熊猫们和老鼠和蟑螂一样多的话,他们的命运应该差很多吧。

把一群级别类似及相差很大的智能体放到一起的时候,他们怎么决定是否合作还是对抗?我们先来看人类自己的例子。

人类是怎么对待自己的人类兄弟的呢?

1890年12月29日,是美国印第安人的伤心之日。 那天,由福赛思上校率领第七骑兵团的500美国骑兵在南达科他州的伤膝河(Wounded Knee)血洗了那里的印第安人苏族的拉科塔部落。

1457797340-9087-aq73VYFlqqTmticcGUBPZ4U8ia9g

显然,人类的利他行为有适用范围:对和自己基因最接近的家庭成员,我们最合作,最关注。从家庭,家族,老乡,到同一人种,同国家,不同国家的人,随着和自己基因和群体的疏远,人类的这种利他性逐步降低,甚至会到敌对面。人的爱和情感,归根结底是利己的,是有适用范围的。智能物种相遇时,如果技术能力差异很大,弱肉强食看起来是智能体的一个共同特点。

几年前,我看到一篇人工智能的研究论文,用计算机模拟的人工智能在多竞争对手的情况下,有时候会选择和水平相近的其它智能合作。我翻了一下历史书,果不其然,发现确实有证据表明是这样。比如,中国近代史上的八国联军压义和团,就是当时技术水平相近的8个世界列强在多竞争对手瓜分中国殖民地的情况下,共同选择的一次性合作。根据这篇论文:“因此,我们有理由认为,不同的智能体会统一表现出一种“驱动力”, 跟它同样强大的生物合作,以获取利益。即使这种行为不是有意而为之。”

1457797340-2322-4Ad07KFsS7Xfc92GUAIsib8PEIfA

正是基于对智能本性的直觉,霍金警告过探索外星文明需要谨慎,而中国著名科幻小说三体里,刘慈欣也提出了基于这种哲学的黑暗森林法则:“宇宙就像是一座黑暗森林,每个文明都是带枪的猎人,像幽灵般潜行于林间,轻轻拨开树枝探索外界,同时竭力不发出脚步声隐藏行踪,因为林中到处都有与他一样潜行的猎人。如果他发现了别的生命不管是不是猎人,不管是天使还是魔鬼,能做的只有一件事:开枪消灭之,在这片森林任何人视他人为地狱,永恒的威胁来源、永恒的资源抢夺者,只有先下手为强的不变思维才能抵消未来潜在风险,任何暴露自己存在的生命都将很快被消灭”。

人类的未来

看起来,人工智能一旦超越人类,一方面会继续按指数成长,一方面要以人类看待细菌的视角俯视我们,按照智能体的共同特点,它会消耗能源和信息,追求其最大的未来可能性。对待人类,它应该没有特别的恶意,但是应该也没有特别的慈悲之心。慈悲之心,是人类这种社会型生物特有的能力,它很美,很人性,它有助于人类合作,是人类在进化过程中经过群体选择形成的优秀品质。但是,很遗憾的是,慈悲并不是宇宙中所有智能体的共同之处,因为,这些智能体的进化可能不是群体选择而是个体选择。即使是合作型的智能体,如果它们和人类一样,它们对待技术能力远逊于自己的其它智能体,弱肉强食的思考方式应该是最有可能的。

1457797340-9423-mUL0SlwtfPq96ja2I3tEMzibS8fw

人工智能,是离我们最近,并且几十年以后应该大幅超越人类的智能。对于它的担心,国外很早就有专门的研究机构研究人工智能的各种危险。Elon Musk也非常关注这个问题,甚至提出要在火星上殖民,增加人类生存机率。 最近通过学习引力波,深知宇宙航行之不易。同时,人类外星殖民者能到的地方,比人类更高级的智能也能到。所以人类长期生存及人机共存问题,必须在地球上解决,跑是跑不掉的。

1457797341-3507-TLfWp3OwZ2BL7wTFboaE9KqNcSpA

在《奇点临近》书里,库兹韦尔大胆提出了宇宙中智能进化的六个纪元。根据这个体系,人类社会目前处在从以技术进化的第四纪元到以技术控制生物学方法进化的第五纪元的跃迁当中。

在阿尔法狗虐人的时代,我们应该开始研究这些哲学问题。作为人类,我们当然需要关注人类未来。但是答案得来的途径也许在于研究宇宙,研究宇宙中智慧的进化方式和生存方式。

机器是否有慈悲之心,通过这篇分析,我们到底学到了什么?

1. 作为人类目力能及范围内的唯一一个高级智能体,如果我们真正在追求未来的多种可能性,也许我们应该更加爱护我们的环境。和发达国家的智能部落相比,在环境的问题上,生活在中国的智能部落也许应该想的更加长远一些。

2. 作为一个有悠久社会化历史的智能体,人类在长期的群体自然选择过程中选择出了小部分富有慈悲和博爱之心的个体。这些个体非常难能可贵,在面对比人类更高级智能的时候,这种特点也许是人类唯一的可爱之处。所以,我们对人群的利他行为要更加珍惜,鼓励和支持。

3. 我们目前所处的时代,这个人工智能的时代,是人类历史上最有戏剧性,变化最快,变化最深刻的一个时代。作为一个智能物种,我们希望保留我们未来的各种可能性。而这似乎只能通过深刻的思考才有可能。希望这篇文章,能够吸引更多的有识之士来共同关注和研究因为人工智能,奇点临近所产生的,只有在我们这个时代才会提出的哲学问题。

最后,祝大家脑洞大开,思想愉快!

]]>