本文主要是介绍7.人工智能原理-高维空间:机器如何面对越来越复杂的问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
一、高维度
二、线性不可分
三、TensorFlow游乐场
四、向量、矩阵、张量
五、编程实验
六、总结
七、往期内容
一、高维度
如果我们想要去判断一个人是否善于打篮球,很明显,仅仅考虑他的身高特征是不合理的。虽然这个特征很关键,但还需要从其他的角度去分析,比如体重、身体灵活性以及是否经常见到凌晨四点钟的太阳等等因素。
高维:同样,在之前的课程中,为了让大家更加清晰的了解神经网络的工作原理,一直仅仅在用豆豆大小这个特征去预测它的毒性,但现实世界往往并非如此简单。比如豆豆的毒性不仅和它的大小有关系,也和它的颜色深浅有关。当毒性只和大小有关系的时候,我们可以用一个二维的坐标系来描述这个关系。那此刻加入一个颜色深浅的特征该如何用图像描述?
这个线性函数的平面经过神经元的第二部分非线性激活函数之后,就被扭曲成为一个S型的曲面,正如一元一次函数的直线被激活函数扭曲成为一个S形曲线一样,那么这个曲面就表示当大小和颜色深浅取某个值的时候对有毒概率的预测结果。
而当我们找到这个预测曲面上,预测值为0.5的点连接在一起,用地理里的概念来说就是高度为0.5的等高线,你会发现是一条直线,这条直线的一边的预测结果大于0.5,也就是有毒,而另一边的预测结果小于0.5,也就是无毒。而当我们从上往下看俯视图效果的时候,这个0.5的等高线也就是大家可能在很多教程或书上看到过的类型分割线。实际上在之前的一元数和有毒概率形成的二维函数中也有一个0.5的等高线,只不过在二维空间中它退化成为了一个点,你可以称之为等高点,而这个等高点同样是两类豆豆的分割点,本质上是一样的。
而通过不断的调整权重参数w1、w2以及偏置参数b,可以让这个预测模型的0.5等高线顺利的分割出有毒和无毒两类豆豆。
二、线性不可分
如果环境中豆豆的大小、颜色、深度和毒性分布是这样一个情况,那就无能为例了,这就是所谓的线性不可分问题。
那如何解决线性不可分问题?而解决的办法我们也说过,那就是在添加隐藏层神经元。通过调整这些神经元的参数,最终把曲面扭曲成为这个样子,0.5的等高线也被扭曲成为这个样子,如此就解决了这种弯曲数据分布的分类问题。
💡思考:下面这个二维输入需要几个隐藏神经元可以让分割线形成一个圈?
输入数据有多少元素,也就是所谓的特征维度,也叫数据维度,从一维的大小数据到二维的大小,颜色深浅数据,再到更高维度的数据,实际上我们把豆豆的特征提取的越多,也就是说我们从更多的维度去观察问题的时候,也就能够更好的预测它的毒性。
三、TensorFlow游乐场
大家可从打开谷歌的tensorflow游乐场,送择这个圆圈形状的数据集,手动添加神经元,验证自己的想法;tensorflow游乐场地址: http://playground.tensorflow.org/
四、向量、矩阵、张量
一维数据为向量,二维的数据为矩阵,三维以后的数据,称之为张量。在机器学习课程里,可以直接把张量理解为多维的数据就好了。正如著名的并且以张量命名的机器学习框架tensorflow的文档里写的那样,这句话说的很明白,张量是向量和矩阵向更高维度的推广。
五、编程实验
本次的编程实验,我们主要来实现一个接收2个输入的神经元,也就是豆豆的输入数据特征维度为2。
1.导入豆豆数据集dataset.py
import numpy as npdef get_beans(counts):xs = np.random.rand(counts,2)*2ys = np.zeros(counts)for i in range(counts):x = xs[i]if (x[0]-0.5*x[1]-0.1)>0:ys[i] = 1return xs,ysdef get_beans2(counts):xs = np.random.rand(counts,2)*2ys = np.zeros(counts)for i in range(counts):x = xs[i]if (np.power(x[0]-1,2)+np.power(x[1]-0.3,2))<0.5:ys[i] = 1return xs,ys
2. 绘图工具封装:plot_utils.py
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as npdef show_scatter(xs,y):x = xs[:,0]z = xs[:,1]fig = plt.figure()ax = Axes3D(fig)ax.scatter(x, z, y)plt.show()def show_surface(x,z,forward_propgation):x = np.arange(np.min(x),np.max(x),0.1)z = np.arange(np.min(z),np.max(z),0.1)x,z = np.meshgrid(x,z)y = forward_propgation(x,z)fig = plt.figure()ax = Axes3D(fig)ax.plot_surface(x, z, y, cmap='rainbow')plt.show()def show_scatter_surface(xs,y,forward_propgation):x = xs[:,0]z = xs[:,1]fig = plt.figure()ax = Axes3D(fig)ax.scatter(x, z, y)x = np.arange(np.min(x),np.max(x),0.01)z = np.arange(np.min(z),np.max(z),0.01)x,z = np.meshgrid(x,z)y = forward_propgation(x,z)ax.plot_surface(x, z, y, cmap='rainbow')plt.show()
3. 梯度下降
import numpy as np
import dataset
import plot_utilsm = 100
xs, ys = dataset.get_beans(m)
print(xs)
print(ys)plot_utils.show_scatter(xs, ys)w1 = 0.1
w2 = 0.2
b = 0.1## [[a,b][c,d]]
## x1s[a,c]
## x2s[b,d]
## 逗号,区分的是维度,冒号:区分的是索引,省略号… 用来代替全索引长度
# 在所有的行上,把第0列切割下来形成一个新的数组
x1s = xs[:, 0]
x2s = xs[:, 1]# 前端传播
def forward_propgation(x1s, x2s):z = w1 * x1s + w2 * x2s + ba = 1 / (1 + np.exp(-z))return a
#画出豆豆的散点图和预测曲面
plot_utils.show_scatter_surface(xs, ys, forward_propgation)#梯度下降
for _ in range(500):for i in range(m):x = xs[i] ## 豆豆特征y = ys[i] ## 豆豆是否有毒x1 = x[0]#第一列x2 = x[1]#第二例a = forward_propgation(x1, x2)e = (y - a) ** 2deda = -2 * (y - a)dadz = a * (1 - a)dzdw1 = x1dzdw2 = x2dzdb = 1dedw1 = deda * dadz * dzdw1dedw2 = deda * dadz * dzdw2dedb = deda * dadz * dzdbalpha = 0.01w1 = w1 - alpha * dedw1w2 = w2 - alpha * dedw2b = b - alpha * dedbplot_utils.show_scatter_surface(xs, ys, forward_propgation)
得出图片
六、总结
本节课介绍多维特征数据输入,机器学习如何进行分类,同时还介绍线性不可分割问题,此时需要添加隐藏层神经元,通过调整这些神经元的参数,最终曲面扭曲,形成0.5的等高线。当输入数据的维度越来越多的时候,我们会发现权重参数也越来越多,如果一个个的去编写它们的函数表达式,未免有点麻烦和拖沓。所以我们将在下一节课给大家介绍专门用来处理多维度数据的数学工具向量和矩阵。学会使用向量和矩阵在机器学习和神经网络中十分重要。在下一节课开始,我们将逐渐走出这些底层的原理分析,直接采用keras框架实现神经网络的搭建。彼时,我们不再需要处理前向传播,也不再需要手写反向传播,甚至梯度下降的细节也会被框架隐藏起来。但我们唯一逃不脱的就是对矩阵和向量的使用。即使在日后的工作和学习中,作为工程人员而不是科研人员化身调参匣,我们还是要熟练的使用矩阵和向量处理问题。然而好消息是,向量和矩阵都很简单,从功课的角度来看,可以说是众多数学分支里最简单,而我们的课程里用到的相关知识就是最基础和精简的部分。
七、往期内容
引言:来一场人工智能的奇妙冒险吧~
1.一元一次函数感知器:如何描述直觉
2.方差代价函数:知错
3.梯度下降:能改
4.曲面梯度下降和反向传播:能改
5.激活函数:给机器注入灵魂
6.隐藏层:神经网络为什么working
7.高维空间:机器如何面对越来越复杂的问题
8.初识Keras:轻松完成神经网络模型搭建
9.深度学习:神奇的DeepLearning
10.卷积神经网络:打破图像识别的瓶颈
11. 卷积神经网络:图像识别实战
12.循环:序列依赖问题
13.LSTM网络:自然语言处理实践
14.机器学习:最后一节课也是第一节课
视频链接:https://pan.baidu.com/s/183EfvqVYDUuXIuDmg8xV0A?pwd=h3tc
可视化工具链接:https://pan.baidu.com/s/1SKG4QK2HymdoriyNdkyGzA?pwd=3bav
可视化工具链接包括:2dim_input_neural.html
这篇关于7.人工智能原理-高维空间:机器如何面对越来越复杂的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!