觉之瞳专题:PyTorch是什么?(v1.0话痨版本)

PyTorch是什么?关于本系列文章的相关声明创作声明费曼学习法声明原创声明首先,什么是人工智能?一个简单扼要的流程概述觉得上面的太难理解?然后,我们稍微扩充亿点点......所以,PyTorch是什么?知识来源

在聊这个话题之前,我们首先先聊聊人工智能的相关话题。

(如AI大佬或已经知道这行在赣吗的,请直接跳到:所以,PyTorch是什么?)

关于本系列文章的相关声明

创作声明

本系列的内容创作分为如下三个部分:

  1. 个人阅读文档之后的理解

  2. 对原文档的部分翻译

  3. 无关紧要部分的AI辅助创作

  4. 部分相关信息的引用及二次创作

本系列的图片来自于:

  1. PPT图形制作

  2. 幕布思维导图工具

  3. AI绘画辅助创作

  4. 网络(如侵权,请联系作者删除)

在此向人类艺术家与一切内容创作者,AI科学家与工程师,程序员团体致以最崇高的敬意。

费曼学习法声明

费曼学习法(Feynman Technique)是一种通过将所学知识用简单明了的语言解释给别人听来加深自己的理解和记忆的学习方法。这种方法最初由物理学家理查德·费曼(Richard Feynman)提出。

费曼学习法的基本思想是:将所学知识用自己的语言表达出来,以便理解、记忆和应用。

瞳君通过边学边创作的方式,将所学知识用简单明了的语言解释给大家,以加深自己的理解和记忆。由于个人理解的局限性,创作内容可能存在错误,欢迎各位专家批评指正。

实验&创作就是失败,失败就是学习,学习就是进步。

原创声明

本系列下的文章引用皆包含出处,未包含出处的皆为瞳君原创@搞知识的觉之瞳遵循相应平台的相关协议进行分发。如需转载,请根据相关平台的内容规定进行转载。

动动手指点击关注,这是免费的,而且你也可以随时改变主意,享受你的阅读吧!

It's free and you can always change your mind, enjoy your reading!

首先,什么是人工智能?

人工智能(Artificial Intelligence,简称 AI)是指计算机系统通过模拟和超越人类智能表现的能力。它是一门涵盖多个领域的交叉学科,包括计算机科学、数学、心理学、哲学等。

人工智能旨在构建能够模拟人类智能行为的计算机程序和系统,这些行为包括感知、学习、推理、认知、创造等。人工智能的应用范围非常广泛,包括自然语言处理、计算机视觉、机器人、智能游戏、智能交通、医疗保健、金融、教育等领域。

人工智能的发展历史可以追溯到上世纪50年代,但直到近年来,随着深度学习、强化学习等技术的不断进步,人工智能才得以获得广泛关注和应用。未来,人工智能将继续发挥重要作用,推动各个领域的创新和发展。

说这么多可能你还是一头雾水,一言以蔽之,人工智能在做的事很简单——猜函数。

什么是函数?

image 

image

好吧,也许你真的不懂函数的概念,现在让我们玩一个小游戏

我手上有一个数字,你可以任意说10次数字,我会把我手上的这一个数字和你说出的那个数字做乘法之后返回给你,然后你需要通过这个方法猜出我手上的这个数字。

什么,你觉得很简单?

那我们换一换

现在你同样可以任意说10次数字,我会把我手上的数字和你的数字做加减乘除4种运算中的固定的任意一个(换而言之,假设我手上的数字是三,然后将要进行的运算是乘法,那么第1次你跟我说数字的时候,我做的是乘法,第2次跟我说数字的时候,我同样也是做乘法,以此类推,运算不会改变),然后把结果给你,然后你需要猜出我手上的这个数字是什么?

 

image

什么,你觉得结果可逆,所以很简单???

 

image

那好吧,规则跟之前一样,但是这次,我会把我手上的数字和你的数字做加减乘除4种运算中随机的任意一个。。。。。。

换而言之,你不知道我每次做的到底是加减乘除中的哪一个,但如果说你通过穷举给出了4种不同的变化,那还是可以解决掉的:

例如:连续给出4,实际数字为5,得到9,-1,0.8,20,通过暴力穷举所有情况(或者试错法),还是可以猜出来的

(这种题目类似于:天堂地狱两扇门,两个门卫,一个说真话,一个说假话,只能对一个人提问一次,如何找出天堂之门?)

那很好现在我们把这个东西扩展一下

我手上有1000个数字

你当然还是可以给出一个数字,并且这次不给你限制次数,你可以任意的给出数字,但是这次我会将你给出的这个数字按照一定的方法依次通过这1000个数字,例如将你给出的数字跟第1个数字做加法,然后和第2个数字做减法......这个次序是固定的,最后将你给出的这个数字和这1000个数字运算完的结果返回给你,然后要求你猜出这1000个数字。

 

image

(如果到这边看得很懵,请直接跳到底下的二级标题:觉得上面的太难理解)

 

image

别急别急,还有更难的

还是跟上面的规则一样,但是每一次你给出一个数字的时候,我会固定变动运算次序中的某3个运算符,换句话来讲,如果第1次你给出的数字,在第2次运算时做的是加法,那么之后你给出另外的数字时,可能在第2次运算时我做的就是乘法了。

好了,到这里是不是已经有点不好搞了?

这就是人工智能,归根到底我们在干的就是这样的事,但是我们不是能力自己来猜,而是通过机器来猜。

我们的任务就是构造一个函数主体,这个函数它的参数是不定的。

然后呢,我们每次给出一个待判断的数据和一个结果,通过一个叫优化算法的东西,让函数对自己的参数进行调整。

之后我们在送入数据的时候,函数就会返回出一个结果,这个结果跟我们给出的真实结果肯定是有差别的。

我们通过一个叫损失函数的函数来衡量这个差别,差别越大,损失函数计算出来的值就越大,否则就越趋近于0。

然后我们把这个差别送给优化算法,让优化算法对函数的参数进行调整,这样迭代几轮下来,如果这个函数足够厉害的话,它就已经趋近于我们想要的问题结果了。

换句话来讲,要解决上面的问题,我们要构建一个模型(这个模型里面有1000个参数),然后让这个模型遵循一定的优化算法去进行优化,再优化迭代到第某个轮次的时候,这个函数已经能做到,我们给出一个数字,他能够猜到大差不差的结果了。此时我们把它结构里面的1000个数字(参数)拎出来,就大差不差是我们想要的1000个数字了

当然这边举的例子是反向传播的特例,有的算法它是不会用损失函数的,它会用别的某些依据来判断真实值与计算值的差别(隔壁的sklearn.tree表示很赣),但这里我们的主要任务是讨论深度学习的计算框架,所以我就不多提传统机器学习的东西。

一个简单扼要的流程概述

那么作为总结,我们再捋一捋整个人工智能学习(这里先不谈传统机器学习,也不谈各种花里胡哨的传播,同样不谈脉冲神经网络,就只谈反向传播)的相关过程。

首先,我们需要一堆数字,也就是人工智能里面提到的数据,同样的我们需要对应的标签,也就是这些数字再被丢到上面讲的黑盒子中运算出来的结果。

 

image

其次我们需要一个模型,这个模型是一个数学函数,数据被丢到这个函数里面运算出来的结果可以和标签进行比较。

 

image

然后我们需要一个损失函数,损失函数是一个数学函数,它接受一个标签和模型计算出来的结果值,返回二者之间的差别,这个差别是一个数值,如果差别越大这个数值就越大,反之则越趋近于0。

 

image

之后我们需要一个优化方法,它是一个数学函数,或者是一个规则,它接收损失函数计算出来的差别,并根据这个差别应用优化方法里面的相关规则,或者函数对原先的模型中里面含有的数值参数(说白了就是函数里面的系数+常数项)进行调整

 

image

综上所述就是下面这个样子:

 

image

所以人工智能这一行归根到底来讲,干的就是猜数字,只要能够把参数猜对了,使得输进去的数据可以出来很不错的标签,那就不是蜘蛛侠了。

那你可能想问文本和图片怎么跟数字相提并论呢?

文本可以编码呀,我们可以让医院这一个词代表114514,以此类推就行了

图片的话更简单了,只需要说三句话就够了:

计算机上的所有东西,不是硬件就是数据(各种软件,指令也算数据的一种)

计算机上的数据可以使用01表示

计算机上面有图片,并且图片不是硬件

所以得出结论:计算机上的图片都是数值表示的

觉得上面的太难理解?

那没关系,那你只需要知道如下几句话:

人工智能干的就是猜数字的活,只要把参数猜对猜准了就OK。

如果想让人工智能猜数字猜得准,最好的方法就是让他做题,他题目做的越多做的越丰富,一般来说,猜数字就猜的越准。

现实世界中的各种信息媒介包括但不限于图片文字,音频视频等,均可以使用数字进行表示

所以学人工智能就像在高考,但这次不同的地方是你是家长,而学生是你的模型,你的任务就是去各地或者通过各种小道消息买各种各样乱七八糟的卷子给你的学生做,但毕竟你的学生智力远低于你,所以他学着学着可能就会出现一些抽象的情况(例如学着学着突然就都不会了),然后你又要费尽心思去解决这些抽象的情况。

然后,我们稍微扩充亿点点......

从这里往下,我们将不再使用猜数字的例子,而是使用高考的例子。这样方便理解,也不至于过分抽象。

首先你去各个地方买卷子,这些卷子他不一定有答案呀,而且答案有的可能是错的。换句话来讲就是你给你的人工智能模型整的数据,它可能是有问题的,甚至可能一点答案都没有。

所以这种情况我们就要给试卷追加答案,或者是把那些没有答案的题目删掉,再拿去给你的模型做,这个过程被我们称之为数据预处理

当然试卷到手的时候你肯定得看一遍吧,要是题目不合适还是怎么着,把学生教坏了就不好了,所以这个时候你就要通过各种手段将试卷的题型,题量,分布分数情况等等弄清楚,这个过程叫做探索性数据分析(EDA)

由于你现在处在的是深度学习的介绍界面,所以你想训练的学生一定是相当聪明的,他不需要做过多的试卷暗示处理,你不需要在试卷上面明示他答案到底是什么(传统机器学习表示很淦)。

但是由于你的学生相对比较死板,试卷的格式如果不合学生的意,他就会拒绝写题目。

所以这种情况我们仍然需要对试卷的题目做一些格式化处理,让它符合学生的爱好。

这个过程叫做特征工程,对于深度学习而言,特征工程一般不需要搞太多花里胡哨的,撑死了也就是一个特征增强,也就是把试卷的相似题型整理出好几份给学生做,但是对于机器学习而言,花里胡哨的东西就比较多,这部分不在这里详细介绍。

特征工程弄完了,但是模型的结构我们还没定下来呢,也就是说这个时候你需要给你的孩子(模型)选择天赋加点。

这个过程叫做模型选择&设计。对于不同的任务需要使用不同的模型,强扭的瓜不甜,设计天赋的时候要针对任务。

不过有意思的一点是,历史上曾经出现强扭的瓜也很甜的情况,这一点我们不在这里过多介绍。

接下来天赋加点设计完成之后,我们需要给你的孩子选择一套训练方法与优化方法,不同的训练方法与优化方法,训出来的孩子效果不一样。例如近些年在自然语言领域里广为流传的手把手教+等级分方法,就受到了广大人士的推崇(懂的都懂doge)。

当然这个过程包含了损失函数的选择优化方法的选择,以及训练过程中的一些小tricks

在模型进行迭代优化的时候,你也许想看看你的学生大概熟练到了什么程度,而这就需要一套评价体系与评估基准,说白了就是给你的学生进行期中考试,你的学生会做一套他之前基本上没有见过的卷子,然后通过你制定的评价体系得到一个分数,这个分数可以衡量你的学生最近一段时间学的怎么样了,这就是评价指标

好了,现在你的学生经过了大量的卷子练习,已经是一名成熟的做题专家了,但是上考场之前还有一些相关的注意事项,首先就是对于人工智能而言,考试也是有限时间的。

对于一些更加注重准确度的任务来说,这部分任务可能并不是那么在乎时间。但是对于一些即时的任务来说,时效性是非常重要的,换而言之,你的学生做题速度不能太慢

所以这个时候你得给你的学生一些小方法,让它做题快一点,同时规范他的做题习惯,让他不要乱来。也可以给他一些简单题做一做,减轻他的思想压力。这个过程叫做模型压缩&裁剪&量化

然后就是把你的学生送上考场了送上考场之后,他就不一定能跟你再见面了,再见面的时候也是你要对他进行调教的时候了,这个过程叫做模型部署

讲了上面这么多,接下来我们把上面那个结构图稍微复杂那么亿点点......

 

image

觉得还是有点抽象???没关系。

image

 

 

image

所以,PyTorch是什么?

PyTorch是一个生态,一个适用于深度学习的生态。

它可以一站式的包办几乎所有的深度学习流程,而具体的流程就像上面所说的那样(什么鸡娃工具包)

image

 

既然说白了它是一种生态,那么它里面包含的任务与功能就不止一个:

任务PyTorch生态
数据源有,但不主要
探索性数据分析有,但不主要
数据预处理 & 特征工程有,但不主要
模型搭建&选择有,主要
损失函数有,主要
模型训练有,主要
评价指标
模型优化有,主要
模型压缩 & 剪裁 & 优化
模型部署

从上面的表格中可以看出pytorch专注于模型构建,训练与优化的过程,同时也附加了其他深度学习流程的组件,这些在下面的章节会一一进行讲解。

知识来源

个人对于人工智能与PyTorch的理解

Pytorch官方网站:PyTorch

PyTorch中文文档:【布客】PyTorch 中文翻译

chatgpt:https://chat.openai.com/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值