泛泛的学习一下深度学习,主要基于的网站是动手学深度学习。不要求自己学的多深入,毕竟也没人要求我去了解,主要是担心在研究生期间会用到这些知识,主要是一个了解与应用的过程。如果有必要,以后会补上《Deep Learning》这本书的读书笔记。
# 引言
什么是参数呢? 参数可以被看作旋钮,旋钮的转动可以调整程序的行为。 任一调整参数后的程序被称为模型(model)。 通过操作参数而生成的所有不同程序(输入 - 输出映射)的集合称为 “模型族”。 使用数据集来选择参数的元程序被称为学习算法(learning algorithm)。
学习(learning)是一个训练模型的过程。 通过这个过程,我们可以发现正确的参数集,从而使模型强制执行所需的行为。 换句话说,我们用数据训练(train)模型。 如 图 1.1.2 所示,训练过程通常包含如下步骤:
- 从一个随机初始化参数的模型开始,这个模型基本没有 “智能”;
- 获取一些数据样本(例如,音频片段以及对应的是或否标签);
- 调整参数,使模型在这些样本中表现得更好;
- 重复第(2)步和第(3)步,直到模型在任务中的表现令人满意。
无论什么类型的机器学习问题,都会遇到这些组件:
- 可以用来学习的数据(data);
- 如何转换数据的模型(model);
- 一个目标函数(objective function),用来量化模型的有效性;
- 调整模型参数以优化目标函数的算法(algorithm)。
与传统机器学习方法相比,深度学习的一个主要优势是可以处理不同长度的数据。
例如不同维度的数据
在一个数据集上,我们可以通过最小化总损失来学习模型参数的最佳值。 该数据集由一些为训练而收集的样本组成,称为训练数据集(training dataset,或称为训练集(training set))。 然而,在训练数据上表现良好的模型,并不一定在 “新数据集” 上有同样的性能,这里的 “新数据集” 通常称为测试数据集(test dataset,或称为测试集(test set))。
# 监督学习
监督学习的学习过程一般可以分为三大步骤:
从已知大量数据样本中随机选取一个子集,为每个样本获取真实标签。有时,这些样本已有标签(例如,患者是否在下一年内康复?);有时,这些样本可能需要被人工标记(例如,图像分类)。这些输入和相应的标签一起构成了训练数据集;
选择有监督的学习算法,它将训练数据集作为输入,并输出一个 “已完成学习的模型”;
将之前没有见过的样本特征放到这个 “已完成学习的模型” 中,使用模型的输出作为相应标签的预测。
整个监督学习过程如 图 1.3.1 所示。
# 回归
判断回归问题的一个很好的经验法则是,任何有关 “有多少” 的问题很可能就是回归问题。
# 分类
一家银行希望在其移动应用程序中添加支票扫描功能。 具体地说,这款应用程序能够自动理解从图像中看到的文本,并将手写字符映射到对应的已知字符之上。 这种 “哪一个” 的问题叫做分类(classification)问题。 分类问题希望模型能够预测样本属于哪个类别(category,正式称为类(class))。 例如,手写数字可能有 10 类,标签被设置为数字 0~9。 最简单的分类问题是只有两类,这被称之为二项分类(binomial classification)。 当有两个以上的类别时,我们把这个问题称为多项分类(multiclass classification)问题。
# 标记问题
学习预测不相互排斥的类别的问题称为多标签分类(multi-label classification)。 举个例子,人们在技术博客上贴的标签,比如 “机器学习”“技术”“小工具”“编程语言”“Linux”“云计算”“AWS”。 一篇典型的文章可能会用 5~10 个标签,因为这些概念是相互关联的。 关于 “云计算” 的帖子可能会提到 “AWS”,而关于 “机器学习” 的帖子也可能涉及 “编程语言”
# 搜索
有时,我们不仅仅希望输出一个类别或一个实值。 在信息检索领域,我们希望对一组项目进行排序。 以网络搜索为例,目标不是简单的 “查询(query)- 网页(page)” 分类,而是在海量搜索结果中找到用户最需要的那部分。 搜索结果的排序也十分重要,学习算法需要输出有序的元素子集。 换句话说,如果要求我们输出字母表中的前 5 个字母,返回 “A、B、C、D、E” 和 “C、A、B、E、D” 是不同的。 即使结果集是相同的,集内的顺序有时却很重要。
该问题的一种可能的解决方案:首先为集合中的每个元素分配相应的相关性分数,然后检索评级最高的元素。PageRank,谷歌搜索引擎背后最初的秘密武器就是这种评分系统的早期例子,但它的奇特之处在于它不依赖于实际的查询。 在这里,他们依靠一个简单的相关性过滤来识别一组相关条目,然后根据 PageRank 对包含查询条件的结果进行排序。 如今,搜索引擎使用机器学习和用户行为模型来获取网页相关性得分,很多学术会议也致力于这一主题。
# 推荐系统
另一类与搜索和排名相关的问题是推荐系统(recommender system),它的目标是向特定用户进行 “个性化” 推荐。 例如,对于电影推荐,科幻迷和喜剧爱好者的推荐结果页面可能会有很大不同。 类似的应用也会出现在零售产品、音乐和新闻推荐等等。
# 序列学习
如果输入的样本之间没有任何关系,以上模型可能完美无缺。 但是如果输入是连续的,模型可能就需要拥有 “记忆” 功能。 比如,我们该如何处理视频片段呢? 在这种情况下,每个视频片段可能由不同数量的帧组成。 通过前一帧的图像,我们可能对后一帧中发生的事情更有把握。 语言也是如此,机器翻译的输入和输出都为文字序列
# 无监督学习
相反,如果工作没有十分具体的目标,就需要 “自发” 地去学习了。 比如,老板可能会给我们一大堆数据,然后要求用它做一些数据科学研究,却没有对结果有要求。 这类数据中不含有 “目标” 的机器学习问题通常被为无监督学习(unsupervised learning), 本书后面的章节将讨论无监督学习技术。 那么无监督学习可以回答什么样的问题呢?来看看下面的例子。
聚类(clustering)问题:没有标签的情况下,我们是否能给数据分类呢?比如,给定一组照片,我们能把它们分成风景照片、狗、婴儿、猫和山峰的照片吗?同样,给定一组用户的网页浏览记录,我们能否将具有相似行为的用户聚类呢?
主成分分析(principal component analysis)问题:我们能否找到少量的参数来准确地捕捉数据的线性相关属性?比如,一个球的运动轨迹可以用球的速度、直径和质量来描述。再比如,裁缝们已经开发出了一小部分参数,这些参数相当准确地描述了人体的形状,以适应衣服的需要。另一个例子:在欧几里得空间中是否存在一种(任意结构的)对象的表示,使其符号属性能够很好地匹配?这可以用来描述实体及其关系,例如 “罗马”-“意大利”+“法国”=“巴黎”。
因果关系(causality)和概率图模型(probabilistic graphical models)问题:我们能否描述观察到的许多数据的根本原因?例如,如果我们有关于房价、污染、犯罪、地理位置、教育和工资的人口统计数据,我们能否简单地根据经验数据发现它们之间的关系?
生成对抗性网络(generative adversarial networks):为我们提供一种合成数据的方法,甚至像图像和音频这样复杂的非结构化数据。潜在的统计机制是检查真实和虚假数据是否相同的测试,它是无监督学习的另一个重要而令人兴奋的领域。
# 与环境互动
有人一直心存疑虑:机器学习的输入(数据)来自哪里?机器学习的输出又将去往何方? 到目前为止,不管是监督学习还是无监督学习,我们都会预先获取大量数据,然后启动模型,不再与环境交互。 这里所有学习都是在算法与环境断开后进行的,被称为离线学习(offline learning)。 对于监督学习,从环境中收集数据的过程类似于 图 1.3.6。
# 强化学习
在强化学习问题中,智能体(agent)在一系列的时间步骤上与环境交互。 在每个特定时间点,智能体从环境接收一些观察(observation),并且必须选择一个动作(action),然后通过某种机制(有时称为执行器)将其传输回环境,最后智能体从环境中获得奖励(reward)。 此后新一轮循环开始,智能体接收后续观察,并选择后续操作,依此类推。 强化学习的过程在 图 1.3.7 中进行了说明。 请注意,强化学习的目标是产生一个好的策略(policy)。 强化学习智能体选择的 “动作” 受策略控制,即一个从环境观察映射到行动的功能。
强化学习框架的通用性十分强大。 例如,我们可以将任何监督学习问题转化为强化学习问题。 假设我们有一个分类问题,可以创建一个强化学习智能体,每个分类对应一个 “动作”。 然后,我们可以创建一个环境,该环境给予智能体的奖励。 这个奖励与原始监督学习问题的损失函数是一致的。
当然,强化学习还可以解决许多监督学习无法解决的问题。 例如,在监督学习中,我们总是希望输入与正确的标签相关联。 但在强化学习中,我们并不假设环境告诉智能体每个观测的最优动作。 一般来说,智能体只是得到一些奖励。 此外,环境甚至可能不会告诉是哪些行为导致了奖励。
以强化学习在国际象棋的应用为例。 唯一真正的奖励信号出现在游戏结束时:当智能体获胜时,智能体可以得到奖励 1;当智能体失败时,智能体将得到奖励 - 1。 因此,强化学习者必须处理学分分配(credit assignment)问题:决定哪些行为是值得奖励的,哪些行为是需要惩罚的。 就像一个员工升职一样,这次升职很可能反映了前一年的大量的行动。 要想在未来获得更多的晋升,就需要弄清楚这一过程中哪些行为导致了晋升。
强化学习可能还必须处理部分可观测性问题。 也就是说,当前的观察结果可能无法阐述有关当前状态的所有信息。 比方说,一个清洁机器人发现自己被困在一个许多相同的壁橱的房子里。 推断机器人的精确位置(从而推断其状态),需要在进入壁橱之前考虑它之前的观察结果。
最后,在任何时间点上,强化学习智能体可能知道一个好的策略,但可能有许多更好的策略从未尝试过的。 强化学习智能体必须不断地做出选择:是应该利用当前最好的策略,还是探索新的策略空间(放弃一些短期回报来换取知识)。
一般的强化学习问题是一个非常普遍的问题。 智能体的动作会影响后续的观察,而奖励只与所选的动作相对应。 环境可以是完整观察到的,也可以是部分观察到的,解释所有这些复杂性可能会对研究人员要求太高。 此外,并不是每个实际问题都表现出所有这些复杂性。 因此,学者们研究了一些特殊情况下的强化学习问题。
当环境可被完全观察到时,强化学习问题被称为马尔可夫决策过程(markov decision process)。 当状态不依赖于之前的操作时,我们称该问题为上下文赌博机(contextual bandit problem)。 当没有状态,只有一组最初未知回报的可用动作时,这个问题就是经典的多臂赌博机(multi-armed bandit problem)。
# 其它
神经网络(neural networks)的得名源于生物灵感。 一个多世纪以来(追溯到 1873 年亚历山大・贝恩和 1890 年詹姆斯・谢林顿的模型),研究人员一直试图组装类似于相互作用的神经元网络的计算电路。 随着时间的推移,对生物学的解释变得不再肤浅,但这个名字仍然存在。 其核心是当今大多数网络中都可以找到的几个关键原则:
线性和非线性处理单元的交替,通常称为层(layers);
使用链式规则(也称为反向传播(backpropagation))一次性调整网络中的全部参数。
# 小结
机器学习研究计算机系统如何利用经验(通常是数据)来提高特定任务的性能。它结合了统计学、数据挖掘和优化的思想。通常,它是被用作实现人工智能解决方案的一种手段。
表示学习作为机器学习的一类,其研究的重点是如何自动找到合适的数据表示方式。深度学习是通过学习多层次的转换来进行的多层次的表示学习。
深度学习不仅取代了传统机器学习的浅层模型,而且取代了劳动密集型的特征工程。
最近在深度学习方面取得的许多进展,大都是由廉价传感器和互联网规模应用所产生的大量数据,以及(通过 GPU)算力的突破来触发的。
整个系统优化是获得高性能的关键环节。有效的深度学习框架的开源使得这一点的设计和实现变得非常容易。