panchuangai

作者|PURVA HUILGOL
编译|Flin
来源|analyticsvidhya

开始你的深度学习生涯?

对于新手来说,深度学习是一个复杂而令人生畏的领域。像隐藏层、卷积神经网络、反向传播等概念在你试图掌握深入学习的主题时不断出现。

这并不容易——尤其是如果你走的是非结构化的学习道路,而且没有首先了解基本的概念。你会像一个没有地图的游客一样在外国城市里蹒跚而行!

有一个好消息——你不需要高级学位或博士学位来学习和掌握深度学习。但是,在进入深度学习世界之前,你应该了解(并精通)某些关键概念。

在本文中,我将介绍五个这样的基本概念。我还建议你通过以下资源来丰富你的深度学习经验:

开始深度学习之旅的五个基本要素是:

  1. 准备系统

  2. Python编程

  3. 线性代数与微积分

  4. 概率统计

  5. 关键的机器学习概念

让我们一一介绍。

1.准备系统

要学习新技能(例如烹饪),你首先需要拥有所有设备。你将需要工具,例如刀,炊具,当然还有燃气灶!你还需要知道如何使用这些工具。

同样,建立你的系统进行深度学习,了解所需工具以及如何使用它们也很重要。

无论你使用的是Windows,Linux或Mac操作系统,都必须了解基本命令。这是一个方便的表格供你参考:

这是一个很棒的教程,可以让你开始使用Git和基本的Git命令:https://www.vogella.com/tutorials/Git/article.html

深度学习热潮不仅带来了AI领域的突破性研究,而且打破了计算机硬件的新壁垒。

GPU(图形处理单元):

对于大多数深度学习项目,你将需要GPU来处理图像和视频数据。你也可以在没有GPU的笔记本电脑/ PC上构建深度学习模型,但是这样做将非常耗时。GPU必须提供的主要优势是:

  1. 它允许并行处理
  2. 在CPU + GPU组合中,CPU将复杂的任务分配给GPU,并将其他任务分配给自身,从而节省了大量时间

这是一段精彩的视频,解释了GPU和CPU之间的区别:

你无需购买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。

总结一下,这是开始构建深度学习模型的基本最低硬件要求:

2. Python编程

继续采用学习烹饪的类比,现在你掌握了操作刀子和煤气灶的窍门。但是实际烹饪食物所需的技能和食谱呢?

这就是我们遇到深度学习所需的软件的地方。Python是一种用于深入学习的跨行业编程语言。

然而,对于深度学习所需的计算和操作,我们不能只使用Python。其他功能由Python中的库提供。一个库可以有数百个称为函数的小工具,我们可以用来编程。

虽然你不需要成为深入学习的编码忍者,但你确实需要了解Python编程的基本知识

也就是说,与其掌握Python编程的浩瀚海洋,不如先学习一些专门用于机器学习和处理数据的特定库

Anaconda是一个帮助你跟踪Python版本和库的框架。它是一个方便的多功能工具,非常流行,易于使用,并且有简单的文档。下面是如何安装Anaconda 。

那么我所说的Python基础是什么意思呢?让我们更详细地讨论一下。

注意:你可以在我们的免费课程中开始学习Python

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基本知识的免费课程:

5.Pandas Python

这是你启动机器学习和深度学习时会遇到的库之一。Pandas是一个非常受欢迎的库,对于深度学习和机器学习都是必需的。

我们以多种格式存储数据,例如CSV(逗号分隔值)文件,Excel工作表等。为了处理这些文件中的数据,Pandas提供了一种称为Pandas数据框的数据结构(你可以考虑一下作为表格)。

数据框和Pandas在数据框上提供的大量操作使其成为机器和深度学习的主力库。

如果你还没有Pandas的话,可以选择免费的简易课程:https://courses.analyticsvidhya.com/courses/pandas-for-data-analysis-in-python

现在,如果你阅读了我们开始做的清单中的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个强大应用程序。

深度学习微积分

我们试图预测的值,例如“ 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

深度学习微积分的学习资源:

4.深度学习的概率统计

就像线性代数一样,“统计和概率”是它自己的数学新世界。对于初学者来说,这可能是非常令人生畏的,甚至经验丰富的数据科学家有时都觉得回忆先进的统计概念是很有挑战性的。

但是,不可否认,统计学是机器学习和深度学习的骨干力量。概率和统计的概念(例如描述性统计和假设检验)在行业中至关重要,在该行业中,深度学习模型的可解释性是重中之重。

让我们从基本定义开始:

  • 统计是对数据的研究

  • 描述统计是对描述和表示数据的数学工具的研究

  • 概率衡量事件发生的可能性

描述性统计

让我举一个简单的例子。假设你在入学考试中获得1000名学生的分数(满分为100分)。有人问你:学生在这次考试中的表现如何?你能向那个人介绍学生的分数吗?将来,你可能会但首先会说平均分数为68。这是数据的平均值。

同样,我们可以根据数据找出更简单的语句:

到此为止,只需说几行,我们就可以说大多数学生的成绩都不错,但在测试中得分不高的人并不多。这就是描述统计。我们仅使用5个值表示了1000名学生的数据。

描述性统计中还使用了其他关键术语,例如:

  • 标准偏差
  • 方差
  • 正态分布
  • 中心极限定理

可能性

基于同一示例,假设你被问到一个问题:如果我从这1000名学生中随机选择一名学生,他/她通过考试的机会是多少?概率的概念将帮助你回答这个问题。如果你获得0.6的概率,则表明他/她通过的概率为60%(假设通过标准为40分)。

可以使用假设检验和推论统计来回答关于同一数据的其他问题(如下所示):

  • 入学考试能被认为是难的吗?
  • 学生的高分是努力学习的结果还是因为考试中的问题很容易?

你可以从以下资源中了解有关统计和概率的所有信息:

5.深度学习的关键机器学习概念

这是个好消息——你无需了解当今存在的机器学习算法的全部范围。并不是说它们无关紧要,而是仅从开始深度学习的角度来看,你不需要了解很多。

但是,有一些概念对于建立你的基础并熟悉自己至关重要。让我们回顾一下这些概念。

有监督和无监督算法

  • 监督学习:在这些算法中,我们知道目标变量(我们要预测的),我们知道输入变量(有助于目标变量的独立特征)。然后,我们生成一个方程,给出输入变量和目标变量之间的关系,并将其应用于我们拥有的数据。示例: kNN, SVM,线性回归等。

  • 无监督学习:在无监督学习中,我们不知道目标变量。它主要用于将数据聚类为组,并且在聚类数据后我们可以识别出组。无监督学习的示例包括 k均值聚类,先验算法等。

评估指标

建立预测模型并不是深度学习所需的唯一步骤。你需要检查模型的质量,并不断对其进行改进,直到我们达到最佳模型为止。

那么,我们如何判断深度学习模型的性能呢?我们使用一些评估指标。根据任务,我们对回归和分类有不同的评估指标。

  • 分类的评估指标:

    • 混淆矩阵

    • 准确性

    • 精确度和召回率

    • F1分数

    • AUC-ROC

    • 日志损失

  • 回归评估指标:

    • RMSE

    • RMSLE

    • R2和调整后的R2

评估指标在深度学习中至关重要。无论是在研究领域还是在行业中,你的深度学习模式都将根据评估指标的价值来判断。

验证技术

深度学习模型会根据提供给它的数据进行自我训练。但是,如上所述,我们需要改进此模型,并且需要检查其性能。仅当我们提供全新的数据(尽管已清理)时,才能观察到模型的真正威力。

但是,我们如何改进该模型?每当我们想更改一个参数时,我们是否就给它新的数据?你可以想象这样一项任务将是多么耗时又昂贵的事情!

这就是为什么我们使用验证。我们将整个数据分为三个部分:训练,验证和测试。这是一个简单的句子,可以帮助你记住:

我们在训练集上训练模型,在验证集上对其进行改进,最后在迄今为止看不见的测试集上进行预测。

交叉验证的一些常见策略是:k倍交叉验证和留一法交叉验证(LOOCV)。

这是一篇全面的文章,内容涉及验证技术以及如何在Python中实施验证技术:使用交叉验证提高模型性能(在Python / R中)

梯度下降

让我们回到前面看到的演算以及对优化的需求。我们怎么知道我们已经达到了最好的模型?我们可以在方程式中进行一些细微的更改,每次更改时,我们都会检查是否接近实际值。

这是朝着可能的方向迈出一小步的行为,也是梯度下降背后的基本直觉。梯度下降是你在深度学习中会遇到并经常重温的最重要概念之一。

Python中的梯度下降的解释和实现:机器学习中的梯度下降算法(以及变体)简介。

线性模型

你能想到的最简单的方程式是什么?让我列出一些:

  1. Y = x + 1
  2. 4x + 3y -2z = 56
  3. Y = x /(1-x)

你是否注意到这三个功能共有的一件事?是的,它们都是线性函数。如果我们可以使用这些函数预测y的值怎么办?

然后这些被称为线性模型。如果你知道线性模型在业界有多流行,你会感到惊讶的。它们不是太复杂,是可解释的,而且通过正确的梯度下降,我们也可以得到高的评估指标!不仅如此,线性模型构成了深入学习的基础。例如,你知道你可以用一个简单的神经网络建立一个逻辑回归模型吗?

这里有一个详细的指南,不仅涵盖线性和逻辑回归,还包括其他线性模型:数据科学中的7种回归类型和技术。

过拟合与过拟合

你经常会遇到这样的情况:你的深度学习模型在训练集上表现很好,但在验证集上却给你很差的准确度。这是因为模型正在从训练集中学习每一个模式,因此,它无法在验证集中检测这些模式。这被称为过度拟合数据,它使模型过于复杂。

另一方面,如果你的深度学习模型在训练集和验证集上都表现不佳,那么它很可能不适合。当我们的数据实际上是非线性的(复杂的)时,可以把它看作是对我们的数据应用一个线性方程(一个过于简单的模型):

一个过拟合和欠拟合的简单类比是一个学生在数学课上的例子:

  • 过拟合与该学生死记硬背地学习了课堂上讨论的所有问题,但在考试期间无法回答与同一概念有关的不同问题有关

  • 欠拟合是那些在课堂上或考试中表现不佳的学生。我们的目标读者是那些不需要知道课堂上讨论的所有问题但在考试中表现出色的模型/学生,以表明他/她知道概念

看看这个关于过拟合和欠拟合的直观解释,以及它们之间的比较:机器学习中的过拟合与欠拟合。

偏差方差

用最简单的术语来说,偏差是实际值和预测值之间的差。方差是通过更改训练数据时输出的变化来衡量的。

让我们快速总结一下上图可以解释的内容:

  1. 左上:非常精确的模型,因此我们的模型的误差会很低,这意味着偏差和偏差都较小。所有数据点都适合靶心

  2. 右上:预测的数据点以靶心为中心(低方差),但彼此之间也相距甚远(高偏差)

  3. 左下:预测值聚集在一起(低方差),但与靶心相去甚远(高偏差)

  4. 右下:预测数据点既不靠近靶心(高偏差)也不彼此靠近(高方差)
    高偏差和高方差都会导致误差增加。通常,高偏差表示拟合不足,而高方差表示拟合过度。既要实现低偏差又要实现低方差是非常困难的——一个通常是以另一个为代价的。

在模型复杂度方面,我们可以使用下图来确定模型的最佳复杂度:

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:

尾注

在本文中,我们介绍了在构建第一个深度学习模型之前需要了解的5个基本事项。在这里,你将遇到流行的深度学习框架,如PyTorch和TensorFlow。它们是用Python构建的,由于你很好的掌握了Python,现在可以很容易地理解如何使用它们。

下面是几篇关于这些框架的好文章:

一旦你在这五大支柱上建立了自己的基础,你就可以探索更高级的概念,如超参数调整、反向传播等。这些都是我积累了深入学习知识的概念。

原文链接:https://www.analyticsvidhya.com/blog/2020/03/deep-learning-5-things-to-know/

欢迎关注磐创AI博客站:
http://panchuang.net/

sklearn机器学习中文官方文档:
http://sklearn123.com/

欢迎关注磐创博客资源汇总站:
http://docs.panchuang.net/

分类:

技术点:

相关文章: