目录

从机器学习(machine learning,ML)在生活中的一个例子开始!

一.常见模型

 1.监督学习

a.回归

b.分类

 c.搜索

 d.推荐系统

 e.序列学习

2.无监督学习

a.聚类(clustering)

b.主成分分析(principal component analysis)

c.因果关系(causality)和概率图模型(probabilistic graphical models)

d.生成对抗网络(generative adversarial networks)

二. 离线学习(offline learning)

三. 强化学习(reinforcement learning)

四.知识掌握情况自测:以下应用分别可用什么方法呢?

五.第一部分总结

六.下一部分预习

起源与发展

        使用数据和神经网络编程的核心思想已经研究了几个世纪。 事实上,人类长期以来就有分析数据和预测未来结果的愿望,而自然科学大部分都植根于此。 例如,伯努利分布是以雅各布•伯努利(1654-1705)命名的。 而高斯分布是由卡尔•弗里德里希•高斯(1777-1855)发现的, 他发明了最小均方算法,至今仍用于解决从保险计算到医疗诊断的许多问题。 这些工具算法催生了自然科学中的一种实验方法——例如,电阻中电流和电压的欧姆定律可以用线性模型完美地描述。

        即使在中世纪,数学家对估计(estimation)也有敏锐的直觉。 例如,雅各布·克贝尔 (1460–1533)的几何学书籍举例说明,通过平均16名成年男性的脚的长度,可以得出一英尺的长度。

        随着数据的收集和可获得性,统计数据真正实现了腾飞。 罗纳德·费舍尔(1890-1962)对统计理论和在遗传学中的应用做出了重大贡献。 他的许多算法(如线性判别分析)和公式(如费舍尔信息矩阵)至今仍被频繁使用。 甚至,费舍尔在1936年发布的鸢尾花卉数据集,有时仍然被用来解读机器学习算法。 

        机器学习的第二个影响来自克劳德·香农(1916–2001)的信息论和艾伦·图灵(1912-1954)的计算理论。 图灵在他著名的论文《计算机器与智能》 (Turing, 1950) 中提出了“机器能思考吗?”的问题。 在他所描述的图灵测试中,如果人类评估者很难根据文本互动区分机器和人类的回答,那么机器就可以被认为是“智能的”。

        神经网络(neural networks)的得名源于生物灵感。 一个多世纪以来(追溯到1873年亚历山大·贝恩和1890年詹姆斯·谢林顿的模型),研究人员一直试图组装类似于相互作用的神经元网络的计算电路。 随着时间的推移,对生物学的解释变得不再肤浅,但这个名字仍然存在。 其核心是当今大多数网络中都可以找到的几个关键原则:

        线性和非线性处理单元的交替,通常称为(layers);

  • 使用链式规则(也称为反向传播(backpropagation))一次性调整网络中的全部参数。

        经过最初的快速发展,神经网络的研究从1995年左右开始停滞不前,直到2005年才稍有起色。 这主要是因为两个原因。 首先,训练网络(在计算上)非常昂贵。 在上个世纪末,随机存取存储器(RAM)非常强大,而计算能力却很弱。 其次,数据集相对较小。 事实上,费舍尔1932年的鸢尾花卉数据集是测试算法有效性的流行工具, 而MNIST数据集的60000个手写数字的数据集被认为是巨大的。

        另一个影响可以在神经科学和心理学中找到。 其中,最古老的算法之一是唐纳德·赫布 (1904–1985)开创性的著作《行为的组织》 (Hebb and Hebb, 1949) 。 他提出神经元通过积极强化学习,是Rosenblatt感知器学习算法的原型,被称为“赫布学习”。 这个算法也为当今深度学习的许多随机梯度下降算法奠定了基础:强化期望行为和减少不良行为,从而在神经网络中获得良好的参数设置。

        考虑到数据和计算的稀缺性,核方法(kernel method)、决策树(decision tree)和图模型(graph models)等强大的统计工具(在经验上)证明是更为优越的。 与神经网络不同的是,这些算法不需要数周的训练,而且有很强的理论依据,可以提供可预测的结果。

        2010年后,大数据和算力激活了深度学习的中流砥柱,如多层感知机 (McCulloch and Pitts, 1943) 、卷积神经网络 (LeCun et al., 1998) 、长短期记忆网络 (Graves and Schmidhuber, 2005) 和Q学习 (Watkins and Dayan, 1992) ,在相对休眠了相当长一段时间之后,在过去十年中被“重新发现”。

         最近十年,在统计模型、应用和算法方面的进展就像寒武纪大爆发——历史上物种飞速进化的时期。一些重大问题的解决加速了这一发展,具有里程碑意义:

  • (1)新的容量控制方法,如dropout (Srivastava et al., 2014),有助于减轻过拟合的危险。这是通过在整个神经网络中应用噪声注入 (Bishop, 1995) 来实现的,出于训练目的,用随机变量来代替权重。

  • (2)注意力机制解决了困扰统计学一个多世纪的问题:如何在不增加可学习参数的情况下增加系统的记忆和复杂性。研究人员通过使用只能被视为可学习的指针结构 (Bahdanau et al., 2014) 找到了一个优雅的解决方案。不需要记住整个文本序列(例如用于固定维度表示中的机器翻译),所有需要存储的都是指向翻译过程的中间状态的指针。这大大提高了长序列的准确性,因为模型在开始生成新序列之前不再需要记住整个序列。

  • (3)多阶段设计。例如,存储器网络 (Sukhbaatar et al., 2015) 和神经编程器-解释器 (Reed and De Freitas, 2015)。它们允许统计建模者描述用于推理的迭代方法。这些工具允许重复修改深度神经网络的内部状态,从而执行推理链中的后续步骤,类似于处理器如何修改用于计算的存储器。

  • (4)另一个关键的发展是生成对抗网络 (Goodfellow et al., 2014) 的发明。传统模型中,密度估计和生成模型的统计方法侧重于找到合适的概率分布(通常是近似的)和抽样算法。因此,这些算法在很大程度上受到统计模型固有灵活性的限制。生成式对抗性网络的关键创新是用具有可微参数的任意算法代替采样器。然后对这些数据进行调整,使得鉴别器(实际上是一个双样本测试)不能区分假数据和真实数据。通过使用任意算法生成数据的能力,它为各种技术打开了密度估计的大门。驰骋的斑马 (Zhu et al., 2017) 和假名人脸(Karras et al., 2017) 的例子都证明了这一进展。即使是业余的涂鸦者也可以根据描述场景布局的草图生成照片级真实图像( (Park et al., 2019) )。

  • (5)在许多情况下,单个GPU不足以处理可用于训练的大量数据。在过去的十年中,构建并行和分布式训练算法的能力有了显著提高。设计可伸缩算法的关键挑战之一是深度学习优化的主力——随机梯度下降,它依赖于相对较小的小批量数据来处理。同时,小批量限制了GPU的效率。因此,在1024个GPU上进行训练,例如每批32个图像的小批量大小相当于总计约32000个图像的小批量。最近的工作,首先是由 (Li, 2017) 完成的,随后是 (You et al., 2017) 和 (Jia et al., 2018) ,将观察大小提高到64000个,将ResNet-50模型在ImageNet数据集上的训练时间减少到不到7分钟。作为比较——最初的训练时间是按天为单位的。

  • (6)并行计算的能力也对强化学习的进步做出了相当关键的贡献。这导致了计算机在围棋、雅达里游戏、星际争霸和物理模拟(例如,使用MuJoCo)中实现超人性能的重大进步。有关如何在AlphaGo中实现这一点的说明,请参见如 (Silver et al., 2016) 。简而言之,如果有大量的(状态、动作、奖励)三元组可用,即只要有可能尝试很多东西来了解它们之间的关系,强化学习就会发挥最好的作用。仿真提供了这样一条途径。

  • (7)深度学习框架在传播思想方面发挥了至关重要的作用。允许轻松建模的第一代框架包括CaffeTorchTheano。许多开创性的论文都是用这些工具写的。到目前为止,它们已经被TensorFlow(通常通过其高级API Keras使用)、CNTKCaffe 2Apache MXNet所取代。第三代工具,即用于深度学习的命令式工具,可以说是由Chainer率先推出的,它使用类似于Python NumPy的语法来描述模型。这个想法被PyTorch、MXNet的Gluon APIJax都采纳了。

    • 本书解决的主要是深度学习。

从机器学习(machine learning,ML)在生活中的一个例子开始!

        ML是一类强大的可以从经验中学习的技术。 通常采用观测数据或与环境交互的形式,机器学习算法会积累更多的经验,其性能也会逐步提高。 相反,对于刚刚所说的电子商务平台,如果它一直执行相同的业务逻辑,无论积累多少经验,都不会自动提高,除非开发人员认识到问题并更新软件。 

在短短几秒钟的时间里,人们与智能手机的日常互动就可以涉及几种机器学习模型。

        一个简单的入门:假如需要我们编写程序来响应一个“唤醒词”(比如“Alexa”“小爱同学”和“Hey Siri”)。 我们试着用一台计算机和一个代码编辑器编写代码,如 图1.1.1中所示。 问题看似很难解决:麦克风每秒钟将收集大约44000个样本,每个样本都是声波振幅的测量值。而该测量值与唤醒词难以直接关联。那又该如何编写程序,令其输入麦克风采集到的原始音频片段,输出是否(表示该片段是否包含唤醒词)的可靠预测呢?我们对编写这个程序毫无头绪,这就是需要机器学习的原因。

        在开始用机器学习算法解决问题之前,我们必须精确地定义问题,确定输入(input)和输出(output)的性质,并选择合适的模型族。 在本例中,模型接收一段音频作为输入,然后在是或否中生成一个选择作为输出。 如果一切顺利,经过一番训练,模型对于“片段是否包含唤醒词”的预测通常是正确的。

        然而,如果我们想处理完全不同的输入或输出,比如:从图像映射到字幕,或从英语映射到中文,可能需要一个完全不同的模型族。

        上面例子中,我们没有编写唤醒词识别器,而是编写了一个“学习”程序。 如果我们用一个巨大的带标签的数据集,它很可能可以“学习”识别唤醒词。 这种“通过用数据集来确定程序行为”的方法可以被看作用数据编程(programming with data)。

一.常见模型

 1.监督学习

        本质上,为模型提供了一个数据集,其中每个样本都有真实的标签。 用概率论术语来说,希望预测“估计给定输入特征的标签”的条件概率。

        监督学习的学习过程一般可以分为三大步骤:

        (1)从已知大量数据样本中随机选取一个子集,为每个样本获取真实标签。有时,这些样本已有标签(例如,患者是否在下一年内康复?);有时,这些样本可能需要被人工标记(例如,图像分类)。这些输入和相应的标签一起构成了训练数据集;

        (2)选择有监督的学习算法,它将训练数据集作为输入,并输出一个“已完成学习的模型”;

        (3)将之前没有见过的样本特征放到这个“已完成学习的模型”中,使用模型的输出作为相应标签的预测。

a.回归

        回归(regression)是最简单的监督学习任务之一。  当标签取任意数值时,我们称之为回归问题,此时的目标是生成一个模型,使它的预测非常接近实际标签值。

        判断回归问题的一个很好的经验法则是,任何有关“有多少”的问题很可能就是回归问题。比如:

这个手术需要多少小时;在未来6小时,这个镇会有多少降雨量。

        若一些差异是由于两个特征之外的几个因素造成的,我们将尝试学习最小化“预测值和实际标签值的差异”的模型。 书中大部分内容主要关注平方误差损失函数的最小化。

b.分类

        给定一个样本特征,模型为每个可能的类分配一个概率。 比如,猫狗分类例子中,分类器可能会输出图像是猫的概率为0.9。 0.9这个数字表达什么意思呢? 可以这样理解:分类器90%确定图像描绘的是一只猫。 预测类别的概率的大小传达了一种模型的不确定性,书中后续章节将讨论其他运用不确定性概念的算法。

        回归是训练一个回归函数来输出一个数值; 分类是训练一个分类器来输出预测的类别。与解决回归问题不同,分类问题的常见损失函数被称为交叉熵(cross-entropy)

        不确定风险的影响远远大于收益。 因此,我们需要将“预期风险”作为损失函数,即需要将结果的概率乘以与之相关的收益(或伤害)。例如:死帽蕈图片判断。

        有一些层次分类任务可以用于寻找层次结构,层次结构假定在许多类之间存在某种关系。 因此,并不是所有的错误都是均等的。

 c.搜索

        在信息检索领域,希望对一组项目进行排序。 以网络搜索为例,目标不是简单的“查询(query)-网页(page)”分类,而是在海量搜索结果中找到用户最需要的那部分。 搜索结果的排序也十分重要,学习算法需要输出有序的元素子集。 换句话说,如果要求我们输出字母表中的前5个字母,返回“A、B、C、D、E”和“C、A、B、E、D”是不同的。 即使结果集是相同的,集内的顺序有时却很重要。    

PageRank(谷歌搜索引擎背后最初的秘密武器就是这种评分系统的早期例子),首先为集合中的每个元素分配相应的相关性分数,依靠一个简单的相关性过滤来识别一组相关条目,然后根据PageRank对包含查询条件的结果进行排序,检索评级最高项。 如今,搜索引擎使用机器学习和用户行为模型来获取网页相关性得分,很多学术会议也致力于这一主题。

 d.推荐系统

        目标是向特定用户进行“个性化”推荐,推荐系统算法经过调整,可以捕捉一个人的偏好。 例如,对于电影推荐,科幻迷和喜剧爱好者的推荐结果页面可能会有很大不同。 马逊基于个性化算法推荐的深度学习书籍。

        尽管推荐系统具有巨大的应用价值,但单纯用它作为预测模型仍存在一些缺陷。 首先,我们的数据只包含“审查后的反馈”:用户更倾向于给他们感觉强烈的事物打分。 例如,在五分制电影评分中,会有许多五星级和一星级评分,但三星级却明显很少。 此外,推荐系统有可能形成反馈循环:推荐系统首先会优先推送一个购买量较大(可能被认为更好)的商品,然而目前用户的购买习惯往往是遵循推荐算法,但学习算法并不总是考虑到这一细节,进而更频繁地被推荐。 综上所述,关于如何处理审查、激励和反馈循环的许多问题,都是重要的开放性研究问题。

 e.序列学习

        如果输入是连续的,模型可能就需要拥有“记忆”功能。 比如,我们该如何处理视频片段呢? 在这种情况下,每个视频片段可能由不同数量的帧组成。 通过前一帧的图像,我们可能对后一帧中发生的事情更有把握。 语言也是如此,机器翻译的输入和输出都为文字序列。

        用属性注释文本序列、自动识别说话人的语音并记录为文本、输入文本输出音频、机器翻译等这些都是热门的序列学习研究领域。

2.无监督学习

        监督学习有具体的目标,只需尽快识别出模式并模仿他们的行为即可。如果工作没有十分具体的目标,就需要“自发”地去学习了。 比如,大堆数据,然后要求用它做一些数据科学研究,却没有对结果有要求。 这类数据中不含有“目标”的机器学习问题通常被为无监督学习(unsupervised learning)。

a.聚类(clustering)

        没有标签的情况下,给数据分类。比如,给定一组照片,我们能把它们分成风景照片、狗、婴儿、猫和山峰的照片吗?同样,给定一组用户的网页浏览记录,将具有相似行为的用户聚类。

b.主成分分析(principal component analysis)

        找到少量的参数准确地捕捉数据的线性相关属性。比如,一个球的运动轨迹可以用球的速度、直径和质量来描述。再比如,裁缝们准确地描述了人体的形状,以适应衣服的需要。另一个例子:在欧几里得空间中是否存在一种(任意结构的)对象的表示,使其符号属性能够很好地匹配,这可以用来描述实体及其关系,例如“罗马”  “意大利”  “法国”  “巴黎”。

c.因果关系(causality)和概率图模型(probabilistic graphical models)

        描述观察到的许多数据的根本原因。例如,如果我们有关于房价、污染、犯罪、地理位置、教育和工资的人口统计数据,根据经验数据发现它们之间的关系。

d.生成对抗网络(generative adversarial networks)

        提供一种合成数据的方法,数据包括像图像和音频这样复杂的非结构化数据。潜在的统计机制是检查真实和虚假数据是否相同的测试,它是无监督学习的另一个重要而令人兴奋的领域。

二. 离线学习(offline learning)

          监督学习和无监督学习均是离线学习,所有学习都是在算法与环境断开后进行的,被称为离线学习(offline learning)。优点:可以孤立地进行模式识别,而不必分心于其他问题。 缺点:解决的问题相当有限。

       考虑“与真实环境互动”将打开一整套新的建模问题,如:

  • 环境还记得我们以前做过什么吗?

  • 环境是否有助于我们建模?例如,用户将文本读入语音识别器。

  • 环境是否想要打败模型?例如,一个对抗性的设置,如垃圾邮件过滤或玩游戏?

  • 环境是否重要?

  • 环境是否变化?例如,未来的数据是否总是与过去相似,还是随着时间的推移会发生变化?是自然变化还是响应我们的自动化工具而发生变化?

        当训练和测试数据不同时,还涉及分布偏移(distribution shift)的问题。

三. 强化学习(reinforcement learning)

        强化学习是一类明确考虑与环境交互的问题。包括应用到机器人、对话系统,甚至开发视频游戏的人工智能(AI)。 

        深度强化学习(deep reinforcement learning)将深度学习应用于强化学习的问题,是非常热门的研究领域。 突破性的深度Q网络(Q-network)在雅达利游戏中仅使用视觉输入就击败了人类, 以及 AlphaGo 程序在棋盘游戏围棋中击败了世界冠军,是两个突出强化学习的例子。

        强化学习的过程在 图1.3.7 中进行了说明。智能体(agent)在一系列的时间步骤上与环境交互。 在每个特定时间点,智能体从环境接收一些观察(observation),并且必须选择一个动作(action),然后通过某种机制(有时称为执行器)将其传输回环境,最后智能体从环境中获得奖励(reward)。 此后新一轮循环开始,智能体接收后续观察,并选择后续操作,依此类推。强化学习的目标是产生一个好的策略(policy)。 强化学习智能体选择的“动作”受策略控制,即一个从环境观察映射到行动的功能。

        环境给予智能体的奖励, 这个奖励与原始监督学习问题的损失函数是一致的。区别是强化学习还可以解决许多监督学习无法解决的问题。 例如,在监督学习中,我们总是希望输入与正确的标签相关联。 但在强化学习中,我们并不假设环境告诉智能体每个观测的最优动作。 一般来说,智能体只是得到一些奖励。 此外,环境甚至可能不会告诉是哪些行为导致了奖励。

        以强化学习在国际象棋的应用为例。 唯一真正的奖励信号出现在游戏结束时:当智能体获胜时,智能体可以得到奖励1;当智能体失败时,智能体将得到奖励-1。 因此,强化学习者必须处理学分分配(credit assignment)问题:决定哪些行为是值得奖励的,哪些行为是需要惩罚的。 就像一个员工升职一样,这次升职很可能反映了前一年的大量的行动。 要想在未来获得更多的晋升,就需要弄清楚这一过程中哪些行为导致了晋升。        

        强化学习可能还必须处理部分可观测性问题。 也就是说,当前的观察结果可能无法阐述有关当前状态的所有信息。 比方说,一个清洁机器人发现自己被困在一个许多相同的壁橱的房子里。 推断机器人的精确位置(从而推断其状态),需要在进入壁橱之前考虑它之前的观察结果。

        最后,在任何时间点上,强化学习智能体可能知道一个好的策略,但可能有许多更好的策略从未尝试过的。 强化学习智能体必须不断地做出选择:是应该利用当前最好的策略,还是探索新的策略空间(放弃一些短期回报来换取知识)。

        当环境可被完全观察到时,强化学习问题被称为马尔可夫决策过程(markov decision process)。 当状态不依赖于之前的操作时,我们称该问题为上下文赌博机(contextual bandit problem)。 当没有状态,只有一组最初未知回报的可用动作时,这个问题就是经典的多臂赌博机(multi-armed bandit problem)。 

四.知识掌握情况自测:以下应用分别可用什么方法呢?

        给定“特征-标签”对作为样本,希望生成一个模型,能够将任何输入特征映射到标签(即预测)。

  • 根据计算机断层扫描(Computed Tomography,CT)肿瘤图像,预测是否为癌症;

  • 给出一个英语句子,预测正确的法语翻译;

  • 根据本月的财务报告数据,预测下个月股票的价格;

  • 预测患者的心脏病是否会发作,那么观察结果“心脏病发作”或“心脏病没有发作”将是样本的标签。 输入特征可能是生命体征,如心率、舒张压和收缩压等;

  • 预测用户对一部电影的评分;

  • 在医学上序列输入和输出就更为重要。 假设一个模型被用来监控重症监护病人,如果他们在未来24小时内死亡的风险超过某个阈值,这个模型就会发出警报;

  • 确定“用户阅读网页的顺序”是二维布局分析问题;

  • 确定下一轮对话,需要考虑对话历史状态以及现实世界的知识;

  • ……

  •    原书练习中有两个特别直观的问题,值得初学者思考:

  • (1)你当前正在编写的代码的哪些部分可以“学习”,即通过学习和自动确定代码中所做的设计选择来改进?你的代码是否包含启发式设计选择?

  • (2)你遇到的哪些问题有许多解决它们的样本,但没有具体的自动化方法?这些可能是使用深度学习的主要候选者。

.第一部分总结

        1.深度学习是机器学习的一个子集。

        2.表示学习(representation learning)作为机器学习的一类,目的是寻找表示本身,其研究的重点是如何自动找到合适的数据表示方式。深度学习是通过学习多层次的转换来进行的多层次的表示学习,因此深度学习可以称为“多级表示学习”。

        3.深度学习方法中最显著的共同点是使用端到端训练。 也就是说,与其基于单独调整的组件组装系统,不如构建系统,然后联合调整它们的性能。   Canny边缘检测器 (Canny, 1987) 和SIFT特征提取器 (Lowe, 2004)作为将图像映射到特征向量的算法,在过去的十年里占据了至高无上的地位。当深度学习开始时,这些特征抽取器被自动调整的滤波器所取代,产生了更高的精确度。

       4.深度学习的一个关键优势是它不仅取代了传统学习管道末端的浅层模型,而且还取代了劳动密集型的特征工程过程。

        5.通过取代大部分特定领域的预处理,深度学习消除了以前分隔计算机视觉、语音识别、自然语言处理、医学信息学和其他应用领域的许多界限,为解决各种问题提供了一套统一的工具。

六.下一部分预习

接下来,要正式开始学习啦,先看看大纲。

 

再牢记李沐老师的视角:

这门课的最重要的一个特点是像教编程语言一样教深度学习。Mike Jordan曾说机器学习和统计学习是同一个东西在统计和计算机不同的面。那么深度学习则更多在计算机这边。我觉得神经网络像是一门编程语言,你将自己对一个机器学习问题的理解描述成一个神经网络的架构。跟别的编程语言不一样的是你声明一个数组时,不需要直接赋值,而是通过数据和程序可导性来填值。


 电子书和视频链接:深度学习入门~李沐【《动手学深度学习》第二版】https://blog.csdn.net/weixin_51929697/article/details/149124765?spm=1011.2415.3001.5331

环境安装:

深度学习环境安装MACOS完整版(python版本过高不兼容d2l的问题解决)-CSDN博客文章浏览阅读145次,点赞3次,收藏4次。本文介绍了在Mac电脑上安装Miniconda并配置PyTorch GPU开发环境的详细步骤:1)下载对应架构的Miniconda安装包;2)安装并初始化Miniconda;3)创建指定Python 3.9版本的d2l环境;4)安装PyTorch GPU版;5)验证GPU加速效果。文章还提供了三种验证方法,包括观察GPU使用情况、编写加速代码以及性能测试对比。最后指出在Mac M3芯片上测试显示GPU运算速度比CPU快3倍,成功搭建了适用于深度学习的开发环境。 https://blog.csdn.net/weixin_51929697/article/details/149137005?spm=1011.2415.3001.5331

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐