7.人工智能原理-高维空间:机器如何面对越来越复杂的问题

本文主要是介绍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.人工智能原理-高维空间:机器如何面对越来越复杂的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/652756

相关文章

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作

如何解决mysql出现Incorrect string value for column ‘表项‘ at row 1错误问题

《如何解决mysql出现Incorrectstringvalueforcolumn‘表项‘atrow1错误问题》:本文主要介绍如何解决mysql出现Incorrectstringv... 目录mysql出现Incorrect string value for column ‘表项‘ at row 1错误报错

如何解决Spring MVC中响应乱码问题

《如何解决SpringMVC中响应乱码问题》:本文主要介绍如何解决SpringMVC中响应乱码问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring MVC最新响应中乱码解决方式以前的解决办法这是比较通用的一种方法总结Spring MVC最新响应中乱码解

pip无法安装osgeo失败的问题解决

《pip无法安装osgeo失败的问题解决》本文主要介绍了pip无法安装osgeo失败的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 进入官方提供的扩展包下载网站寻找版本适配的whl文件注意:要选择cp(python版本)和你py

解决Java中基于GeoTools的Shapefile读取乱码的问题

《解决Java中基于GeoTools的Shapefile读取乱码的问题》本文主要讨论了在使用Java编程语言进行地理信息数据解析时遇到的Shapefile属性信息乱码问题,以及根据不同的编码设置进行属... 目录前言1、Shapefile属性字段编码的情况:一、Shp文件常见的字符集编码1、System编码