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

相关文章

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

Redis出现中文乱码的问题及解决

《Redis出现中文乱码的问题及解决》:本文主要介绍Redis出现中文乱码的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 问题的产生2China编程. 问题的解决redihttp://www.chinasem.cns数据进制问题的解决中文乱码问题解决总结

MySQL中的表连接原理分析

《MySQL中的表连接原理分析》:本文主要介绍MySQL中的表连接原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、表连接原理【1】驱动表和被驱动表【2】内连接【3】外连接【4编程】嵌套循环连接【5】join buffer4、总结1、背景

全面解析MySQL索引长度限制问题与解决方案

《全面解析MySQL索引长度限制问题与解决方案》MySQL对索引长度设限是为了保持高效的数据检索性能,这个限制不是MySQL的缺陷,而是数据库设计中的权衡结果,下面我们就来看看如何解决这一问题吧... 目录引言:为什么会有索引键长度问题?一、问题根源深度解析mysql索引长度限制原理实际场景示例二、五大解决

Springboot如何正确使用AOP问题

《Springboot如何正确使用AOP问题》:本文主要介绍Springboot如何正确使用AOP问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录​一、AOP概念二、切点表达式​execution表达式案例三、AOP通知四、springboot中使用AOP导出

Python中Tensorflow无法调用GPU问题的解决方法

《Python中Tensorflow无法调用GPU问题的解决方法》文章详解如何解决TensorFlow在Windows无法识别GPU的问题,需降级至2.10版本,安装匹配CUDA11.2和cuDNN... 当用以下代码查看GPU数量时,gpuspython返回的是一个空列表,说明tensorflow没有找到

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题

《解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题》:本文主要介绍解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4... 目录未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘打开pom.XM