作者 |PURVA HUILGOL
编译 |Flin
起源 |analyticsvidhya
开始你的深度学习生涯?
对于老手来说,深度学习是一个简单而令人生畏的畛域。像暗藏层、卷积神经网络、反向流传等概念在你试图把握深刻学习的主题时一直呈现。
这并不容易——尤其是如果你走的是非结构化的学习路线,而且没有首先理解根本的概念。你会像一个没有地图的游客一样在外国城市里蹒跚而行!
有一个好消息——你不须要高级学位或博士学位来学习和把握深度学习。然而,在进入深度学习世界之前,你应该理解(并精通)某些要害概念。
在本文中,我将介绍五个这样的基本概念。我还倡议你通过以下资源来丰盛你的深度学习教训:
-
神经网络入门(收费课程)
- https://courses.analyticsvidh…
-
应用深度学习的计算机视觉
- https://courses.analyticsvidh…
-
2020 年深度学习的综合学习之路
- https://www.analyticsvidhya.c…
开始深度学习之旅的五个基本要素是:
- 筹备零碎
- Python 编程
- 线性代数与微积分
- 概率统计
- 要害的机器学习概念
让咱们一一介绍。
1. 筹备零碎
要学习新技能(例如烹饪),你首先须要领有所有设施。你将须要工具,例如刀,炊具,当然还有燃气灶!你还须要晓得如何应用这些工具。
同样,建设你的零碎进行深度学习,理解所需工具以及如何应用它们也很重要。
无论你应用的是 Windows,Linux 或 Mac 操作系统,都必须理解根本命令。这是一个不便的表格供你参考:
这是一个很棒的教程,能够让你开始应用 Git 和根本的 Git 命令:https://www.vogella.com/tutor…
深度学习热潮不仅带来了 AI 畛域的突破性钻研,而且突破了计算机硬件的新壁垒。
GPU(图形处理单元):
对于大多数深度学习我的项目,你将须要 GPU 来解决图像和视频数据。你也能够在没有 GPU 的笔记本电脑 / PC 上构建深度学习模型,然而这样做将十分耗时。GPU 必须提供的次要劣势是:
- 它容许并行处理
- 在 CPU + GPU 组合中,CPU 将简单的任务分配给 GPU,并将其余任务分配给本身,从而节俭了大量工夫
这是一段精彩的视频,解释了 GPU 和 CPU 之间的区别:
- https://youtu.be/-P28LKWTzrI
你无需购买 GPU 或在计算机上安装 GPU。有多种云计算资源可收费提供或以极低的老本提供 GPU。此外,有一些预装了一些练习数据集并事后加载了本人的教程的 GPU。其中一些是 Paperspace Gradient,Google Colab 和 Kaggle Kernels。
另一方面,也有成熟的服务器,它们须要一些装置步骤和一些自定义性能,例如 Amazon Web Services EC2。
下表阐明了你领有的选项:
深度学习还使得 Google 开发了本人类型的处理单元,专门用于构建神经网络和深度学习工作 -TPU。
TPUs
TPU 或张量处理单元实质上是与 CPU 一起应用的协处理器。TPU 比 GPU 便宜,因而速度要快得多,因而能够轻松构建深度学习模型。
Google Colab 还提供收费应用的 TPU(不是残缺的企业版,而是云版)。这是 Google 本人的无关应用 TPU 并在其上建设模型的 Colab 教程:Colab notebooks | 云 TPU。
- https://cloud.google.com/tpu/…
总结一下,这是开始构建深度学习模型的根本最低硬件要求:
2. Python 编程
持续采纳学习烹饪的类比,当初你把握了操作刀子和煤气灶的诀窍。然而理论烹饪食物所需的技能和食谱呢?
这就是咱们遇到深度学习所需的软件的中央。Python 是一种用于深刻学习的跨行业编程语言。
然而,对于深度学习所需的计算和操作,咱们不能只应用 Python。其余性能由 Python 中的库提供。一个库能够有数百个称为函数的小工具,咱们能够用来编程。
尽管你不须要成为深刻学习的编码忍者,但你的确须要理解 Python 编程的基本知识
也就是说,与其把握 Python 编程的浩瀚陆地,不如先学习一些专门用于机器学习和解决数据的特定库
Anaconda 是一个帮忙你跟踪 Python 版本和库的框架。它是一个不便的多功能工具,十分风行,易于应用,并且有简略的文档。上面是如何装置 Anaconda。
- https://www.analyticsvidhya.c…
那么我所说的 Python 根底是什么意思呢?让咱们更具体地讨论一下。
留神:你能够在咱们的收费课程中开始学习 Python
- https://courses.analyticsvidh…
1. Python 中的变量和数据类型
Python 中的次要数据类型是:
- Int:整数
- Float:小数
- String:单个字符或字符序列
- Bool:保留 2 个布尔值 -True 和 False
2. Python 中的运算符
Python 中有 5 种次要的运算符类型:
- 算术运算符:+,-,*,/ 等
- 比拟运算符:如 <,>,<=,> =,==,!=
- 逻辑运算符:and, or, not
- 标识运算符:is, is not
- 成员资格运算符:in, not in
3. Python 中的数据结构
Python 提供了多种数据集,可用于不同目标。每个数据结构都有其独特的属性,咱们能够利用它们存储不同类型的数据和数据类型。这些属性是:
- 有序的:这意味着数据结构中元素的存储程序是特定的。无论咱们如何以及何时应用它,此程序都将放弃不变(除非咱们明确更改它)
- 不可变:这意味着无奈更改数据结构。如果数据结构是可变的,则意味着能够更改它
在数据迷信中,最罕用的数据结构是:
- Lists:有序且可变
示例:咱们有一个这样的列表:
my_list = [1、3、7、9]
在应用到此列表的所有中央,此程序都将放弃不变。另外,咱们能够更改此列表,例如删除 7,增加 11 等。
- Tuple:相似于列表(有序),但与列表不同,元组是不可变的
示例:元组能够申明为:
my_tuple = ("apple", "banana", "cherry")
当初,此程序将放弃不变,然而与列表不同,咱们无奈删除“cherry”或在元组中增加“orange”。
- Sets:无序且可变,只管它们只能包容惟一的值
示例:汇合应用如下花括号:
my_set = {'apple', 'banana', 'cherry'}
没有为汇合定义程序。
- Dictionaries:一组 < 键,值 > 对。字典是无序且可变的。这意味着它们基本上没有程序,能够更改,然而能够通过索引或键进行拜访。字典只能具备惟一键,只管键不肯定必须具备惟一值。
示例:字典还应用键值格局的花括号:
my_dict = {"brand": "Ford", "model": "Mustang", "year": 1964}
在这里,“brand”,“model”和“year”是别离具备值“Ford”,“Mustang”和“1964”的键。每次打印字典时,键的程序能够不同。
4. Python 中的控制流
控制流意味着控制代码执行流。咱们一行一行地执行代码,一行执行的内容会影响咱们编写下一行代码的形式:
条件语句
通过咱们之前看到的条件运算符设置条件。
- if-else:你明天想吃点什么?汉堡还是沙拉?如果你想要更衰弱的抉择,则能够抉择沙拉,或者,如果你只是想要一口快餐而又不关怀卡路里,则能够抉择汉堡。这就是 if-else 条件语句的作用
示例:你须要查看学生是通过还是不通过。如果他取得的分数 > = 40,则示意他已通过;否则,他的问题是不通过。
在这种状况下,咱们的条件语句将是:
if marks >= 40:
print("Pass")
else:
print("Fail")
循环
for 循环:用来遍历序列。该序列能够示意字符序列(字符串)或下面的任何数据结构,例如列表,汇合,元组和字典
示例:咱们有一个值从 1 到 5 的列表,咱们须要将此列表中的每个值乘以 3:
numbers_list = [1, 2, 3, 4, 5]
for each_number is numbers_list:
print(each_number * 3)
试试下面的代码片段,你会发现 Python 如许简略!
乏味的是:与其余编程语言不同,咱们不须要在数据结构中存储雷同类型的变量。咱们齐全能够有一个像这样的列表 [John,153,78.5,“A +”] 甚至是一个像 [[“A”,56],[“B”,36.5] ] 这样的列表。正是 Python 的多样性和灵活性使它在数据科学家中如此受欢迎!
你还能够利用以下波及 Python 和 Pandas 基本知识的收费课程:
-
Python for Data Science 课程–收费课程
- https://courses.analyticsvidh…
-
Pandas 用 Python 进行数据分析
- https://courses.analyticsvidh…
5.Pandas Python
这是你启动机器学习和深度学习时会遇到的库之一。Pandas 是一个十分受欢迎的库,对于深度学习和机器学习都是必须的。
咱们以多种格局存储数据,例如 CSV(逗号分隔值)文件,Excel 工作表等。为了解决这些文件中的数据,Pandas 提供了一种称为 Pandas 数据框的数据结构(你能够考虑一下作为表格)。
数据框和 Pandas 在数据框上提供的大量操作使其成为机器和深度学习的主力库。
如果你还没有 Pandas 的话,能够抉择收费的繁难课程:https://courses.analyticsvidh…
当初,如果你浏览了咱们开始做的清单中的 5 件事,你可能会有一个问题:深度学习中的数学将如何解决?
好吧,让咱们找出答案!
3. 深度学习的线性代数和微积分
有一个广泛的误区,即深度学习须要高级的线性代数和微积分常识。好吧,让我在这里打消这个误区。
你只须要回忆起你的高中数学就能够开始深度学习之旅!
让咱们举一个简略的例子。咱们有猫和狗的图像,咱们心愿机器通知咱们任何给定图像中存在哪种动物:
当初,咱们能够在此处轻松辨认猫和狗。然而机器将如何辨别两者?惟一的办法是以数字的模式将数据提供给模型,这就是咱们须要线性代数的中央。咱们基本上将猫和狗的图像转换为数字。这些数字能够示意为向量或矩阵。
咱们将介绍一些要害术语以及一些你能够从中学习的重要资源。
深度学习的线性代数
1. 标量和向量:尽管标量仅具备幅度,但向量同时具备方向和幅度。
- 点积:两个向量的点积返回一个标量值
- 叉积:两个向量的叉积返回另一个与这两个向量正交(直角)的向量
示例:如果咱们有 2 个向量 a = [1,-3,5] 和 b = [4,-2,-1],则:
a)点积:
a . b = (a1 * b1) + (a2 * b2) + (a3 * b3) = (1 * 4) + (-3 * -2) + (5 * 1) = 3
b)叉积:
a X b = [c1, c2, c3] = [13, 21, 10]
当
c1 =(a2 * b3)-(a3 * b2)c2 =(a3 * b1)-(a1 * b3)c3 =(a1 * b2)-(a2 * b1)
2. 矩阵和矩阵运算:矩阵是行和列模式的数字数组。例如,下面的猫的图像能够写成像素矩阵:
就像数字一样,咱们能够对两个矩阵执行加法和减法的操作。然而,乘法和除法等运算与惯例形式稍有不同:
- 标量乘法:当咱们将单个标量值与矩阵相乘时,咱们将标量与矩阵中的所有元素相乘
- 矩阵乘法:将 2 个矩阵相乘意味着计算行和列的点积,并创立一个尺寸与 2 个输出矩阵不同的新矩阵
- 矩阵的转置:咱们替换矩阵中的行和列以获取其转置
- 逆矩阵:从概念上看,它与反数字类似,矩阵的逆与矩阵相乘即可失去一个单位矩阵
你能够参考这本对于线性代数的 Khan Academy 优良课程,以具体理解上述概念。你还能够在此处查看线性代数的 10 个弱小应用程序。
- 课程:https://www.khanacademy.org/m…
- 线性代数的 10 个弱小应用程序:https://www.analyticsvidhya.c…
深度学习微积分
咱们试图预测的值,例如“y”,就是图像是猫还是狗。该值能够示意为输出变量 / 输出向量的函数。咱们的次要目标是使此预测值靠近理论值。
当初,设想一下解决成千上万的猫和狗的图像。这些看上去的确很可恶,然而你能够设想,解决这些图像和数字基本不容易!
因为深度学习实质上波及大量数据和简单的机器学习模型,因而两者的应用通常会浪费时间和资源。这就是为什么重要的是要优化咱们的深度学习模型,以使其可能尽可能精确地进行预测而无需应用过多的资源和工夫。
这就是深度学习中微积分的关键所在:优化。
在任何深度学习或机器学习模型中,咱们都能够将输入示意为输出变量的数学函数。因而,咱们须要查看输入如何随每个输出变量的变动而变动。咱们须要衍生工具来执行此操作,因为衍生工具示意变化率。
导数和偏导数:简略来说,当咱们扭转输出值时,导数测量输入值的变动。用数学术语来说:
If y = f(x), then the derivative of y with respect to x, id given as
dy/dx = change in y / change in x
在几何上,如果咱们将 f(x)示意为图,则该点的导数也是该点在该图上的切线的斜率。
这是一个能够帮忙你了解它的图:
咱们下面看到的导数仅波及一个变量 x。然而,在深度学习中,最终输入 y 可能取决于数百个变量。在这种状况下,咱们须要针对每个输出变量计算 y 的变化率。这是偏导数呈现的中央。
偏导数:基本上,咱们只思考一个变量,而将所有其余变量放弃不变。而后,咱们应用残余变量计算 y 的导数。这样,咱们就能够计算每个变量的导数。
链式规定:通常,依据输出变量,y 的函数可能要简单得多。那么咱们如何计算导数?链式规定可帮忙咱们计算以下内容:
If y = f(g(x)), where g(x) is a function of x, and f is a function of g(x), then
dy/dx = df/dx * dg/dx
让咱们思考一个绝对简略的示例:
y = sin(x ^ 2)
因而,应用链式规定:
dy / dx = d(sin(x2))/ dx * d(x2)/ dx = cos(x2)* 2x
深度学习微积分的学习资源:
-
可汗学院微积分课程:微积分
- https://www.khanacademy.org/m…
-
3Blue1Brown 上有对于数学和微积分的精彩视频:
- https://www.youtube.com/chann…
4. 深度学习的概率统计
就像线性代数一样,“统计和概率”是它本人的数学新世界。对于初学者来说,这可能是十分令人生畏的,甚至经验丰富的数据科学家有时都感觉回顾先进的统计概念是很有挑战性的。
然而,不可否认,统计学是机器学习和深度学习的骨干力量。概率和统计的概念(例如描述性统计和假设检验)在行业中至关重要,在该行业中,深度学习模型的可解释性是重中之重。
让咱们从根本定义开始:
- 统计是对数据的钻研
- 描述统计是对形容和示意数据的数学工具的钻研
- 概率掂量事件产生的可能性
描述性统计
让我举一个简略的例子。假如你在入学考试中取得 1000 名学生的分数(满分为 100 分)。有人问你: 学生在这次考试中的体现如何?你能向那个人介绍学生的分数吗?未来,你可能会但首先会说均匀分数为 68。这是数据的平均值。
同样,咱们能够依据数据找出更简略的语句:
到此为止,只需说几行,咱们就能够说大多数学生的问题都不错,但在测试中得分不高的人并不多。这就是描述统计。咱们仅应用 5 个值示意了 1000 名学生的数据。
描述性统计中还应用了其余要害术语,例如:
- 标准偏差
- 方差
- 正态分布
- 核心极限定理
可能性
基于同一示例,假如你被问到一个问题:如果我从这 1000 名学生中随机抉择一名学生,他 / 她通过考试的机会是多少?概率的概念将帮忙你答复这个问题。如果你取得 0.6 的概率,则表明他 / 她通过的概率为 60%(假如通过规范为 40 分)。
能够应用假设检验和推论统计来答复对于同一数据的其余问题(如下所示):
- 入学考试能被认为是难的吗?
- 学生的高分是努力学习的后果还是因为考试中的问题很容易?
你能够从以下资源中理解无关统计和概率的所有信息:
-
数据迷信导论(统计与概率论)
- https://courses.analyticsvidh…
-
综合实用推理统计指南
- https://www.analyticsvidhya.c…
-
数据迷信概率根底
- https://www.analyticsvidhya.c…
-
你的统计假设假如测试指南
- https://www.analyticsvidhya.c…
5. 深度学习的要害机器学习概念
这是个好消息——你无需理解当今存在的机器学习算法的全副范畴。并不是说它们无关紧要,而是仅从开始深度学习的角度来看,你不须要理解很多。
然而,有一些概念对于建设你的根底并相熟本人至关重要。让咱们回顾一下这些概念。
有监督和无监督算法
- 监督学习:在这些算法中,咱们晓得指标变量(咱们要预测的),咱们晓得输出变量(有助于指标变量的独立特色)。而后,咱们生成一个方程,给出输出变量和指标变量之间的关系,并将其利用于咱们领有的数据。示例:kNN,SVM,线性回归等。
- 无监督学习:在无监督学习中,咱们不晓得指标变量。它次要用于将数据聚类为组,并且在聚类数据后咱们能够辨认出组。无监督学习的示例包含 k 均值聚类,先验算法等。
评估指标
建设预测模型并不是深度学习所需的惟一步骤。你须要查看模型的品质,并一直对其进行改良,直到咱们达到最佳模型为止。
那么,咱们如何判断深度学习模型的性能呢?咱们应用一些评估指标。依据工作,咱们对回归和分类有不同的评估指标。
-
分类的评估指标:
- 混同矩阵
- 准确性
- 精确度和召回率
- F1 分数
- AUC-ROC
- 日志损失
-
回归评估指标:
- RMSE
- RMSLE
- R2 和调整后的 R2
评估指标在深度学习中至关重要。无论是在钻研畛域还是在行业中,你的深度学习模式都将依据评估指标的价值来判断。
-
每个人都应该晓得的 11 种重要的机器学习模型评估指标
- https://www.analyticsvidhya.c…
-
收费课程——机器学习模型的评估指标
- https://courses.analyticsvidh…
验证技术
深度学习模型会依据提供给它的数据进行自我训练。然而,如上所述,咱们须要改良此模型,并且须要查看其性能。仅当咱们提供全新的数据(只管已清理)时,能力察看到模型的真正威力。
然而,咱们如何改良该模型?每当咱们想更改一个参数时,咱们是否就给它新的数据?你能够设想这样一项工作将是如许耗时又低廉的事件!
这就是为什么咱们应用验证。咱们将整个数据分为三个局部:训练,验证和测试。这是一个简略的句子,能够帮忙你记住:
咱们在训练集上训练模型,在验证集上对其进行改良,最初在迄今为止看不见的测试集上进行预测。
穿插验证的一些常见策略是:k 倍穿插验证和留一法穿插验证(LOOCV)。
这是一篇全面的文章,内容波及验证技术以及如何在 Python 中施行验证技术:应用穿插验证进步模型性能(在 Python / R 中)
- https://www.analyticsvidhya.c…
梯度降落
让咱们回到后面看到的演算以及对优化的需要。咱们怎么晓得咱们曾经达到了最好的模型?咱们能够在方程式中进行一些轻微的更改,每次更改时,咱们都会查看是否靠近理论值。
这是朝着可能的方向迈出一小步的行为,也是梯度降落背地的根本直觉。梯度降落是你在深度学习中会遇到并常常重温的最重要概念之一。
Python 中的梯度降落的解释和实现:机器学习中的梯度降落算法(以及变体)简介。
线性模型
你能想到的最简略的方程式是什么?让我列出一些:
- Y = x + 1
- 4x + 3y -2z = 56
- Y = x /(1-x)
你是否留神到这三个性能共有的一件事?是的,它们都是线性函数。如果咱们能够应用这些函数预测 y 的值怎么办?
而后这些被称为线性模型。如果你晓得线性模型在业界有多风行,你会感到诧异的。它们不是太简单,是可解释的,而且通过正确的梯度降落,咱们也能够失去高的评估指标!不仅如此,线性模型形成了深刻学习的根底。例如,你晓得你能够用一个简略的神经网络建设一个逻辑回归模型吗?
这里有一个具体的指南,不仅涵盖线性和逻辑回归,还包含其余线性模型:数据迷信中的 7 种回归类型和技术。
- https://www.analyticsvidhya.c…
过拟合与过拟合
你常常会遇到这样的状况:你的深度学习模型在训练集上体现很好,但在验证集上却给你很差的准确度。这是因为模型正在从训练集中学习每一个模式,因而,它无奈在验证集中检测这些模式。这被称为适度拟合数据,它使模型过于简单。
另一方面,如果你的深度学习模型在训练集和验证集上都体现不佳,那么它很可能不适宜。当咱们的数据实际上是非线性的(简单的)时,能够把它看作是对咱们的数据利用一个线性方程(一个过于简略的模型):
一个过拟合和欠拟合的简略类比是一个学生在数学课上的例子:
- 过拟合与该学生死记硬背地学习了课堂上探讨的所有问题,但在考试期间无法回答与同一概念无关的不同问题无关
- 欠拟合是那些在课堂上或考试中体现不佳的学生。咱们的指标读者是那些不须要晓得课堂上探讨的所有问题但在考试中表现出色的模型 / 学生,以表明他 / 她晓得概念
看看这个对于过拟合和欠拟合的直观解释,以及它们之间的比拟:机器学习中的过拟合与欠拟合。
- https://www.analyticsvidhya.c…
偏差方差
用最简略的术语来说,偏差是理论值和预测值之间的差。方差是通过更改训练数据时输入的变动来掂量的。
让咱们疾速总结一下上图能够解释的内容:
- 左上:十分准确的模型,因而咱们的模型的误差会很低,这意味着偏差和偏差都较小。所有数据点都适宜靶心
- 右上:预测的数据点以靶心为核心(低方差),但彼此之间也相距甚远(高偏差)
- 左下:预测值汇集在一起(低方差),但与靶心相去甚远(高偏差)
- 右下:预测数据点既不凑近靶心(高偏差)也不彼此凑近(高方差)
高偏差和高方差都会导致误差减少。通常,高偏差示意拟合有余,而高方差示意拟合适度。既要实现低偏差又要实现低方差是十分艰难的——一个通常是以另一个为代价的。
在模型复杂度方面,咱们能够应用下图来确定模型的最佳复杂度:
sklearn
就像 Pandas 库一样,还有另一个库形成了机器学习的根底。sklearn 库是机器学习中最受欢迎的库。它蕴含大量的机器学习算法,你能够将它们以函数的模式利用于数据。
此外,sklearn 甚至还具备用于所有评估指标,穿插验证以及缩放 / 标准化数据的性能。
这是一个理论的 sklearn 示例:
from sklearn import datasets, linear_model
from sklearn.metrics import mean_squared_error
regr = LinearRegression()
#train your data - remember how we train the model on our train set?
regr.fit(X_train, y_train)
#predict on our validation set to improve it
y_pred = regr.predict(X_Valid)
#evaluation metrics: MSE
print('Mean Squared Error:', mean_squared_error(y_test, y_pred))
...#further improvement of our model
咱们能够用少于 10 行的代码构建一个简略的线性回归模型!
这里有一些很好的资源,能够进一步理解 sklearn:
-
scikit-learn(sklearn)机器学习入门
- https://courses.analyticsvidh…
-
你须要理解的对于 kitkit-learn 最新更新的所有信息
- https://www.analyticsvidhya.c…
尾注
在本文中,咱们介绍了在构建第一个深度学习模型之前须要理解的 5 个根本事项。在这里,你将遇到风行的深度学习框架,如 PyTorch 和 TensorFlow。它们是用 Python 构建的,因为你很好的把握了 Python,当初能够很容易地了解如何应用它们。
上面是几篇对于这些框架的好文章:
-
深度学习指南:介绍如何在 Python 中应用 TensorFlow 实现神经网络
- https://www.analyticsvidhya.c…
-
Pythorch 的一个初学者敌对的指南及其如何从头开始工作
- https://www.analyticsvidhya.c…
一旦你在这五大支柱上建设了本人的根底,你就能够摸索更高级的概念,如超参数调整、反向流传等。这些都是我积攒了深刻学习常识的概念。
原文链接:https://www.analyticsvidhya.c…
欢送关注磐创 AI 博客站:
http://panchuang.net/
sklearn 机器学习中文官网文档:
http://sklearn123.com/
欢送关注磐创博客资源汇总站:
http://docs.panchuang.net/