深度学习笔记

动手深度学习v2

引言

机器学习中的关键组件

无论什么类型的机器学习,都需要以下组件:

  1. 学习的数据
  2. 转换数据的模型
  3. 目标函数,量化模型的有效性
  4. 调整模型参数以优化目标函数的算法

数据

大多时候遵循独立同分布(指随机过程中,任何时刻的取值都为随机变量,这些随机变量服从同一分布,并且互相独立)

目标函数

通常定义一个目标函数,并希望优化它到最低点。 因为越低越好,所以这些函数有时被称为损失函数(loss function)

优化算法

一种算法,它能够搜索出最佳参数,以最小化损失函数。 深度学习中,大多流行的优化算法通常基于一种基本方法–梯度下降(gradient descent)。

各种机器学习问题

监督学习

监督学习(supervised learning)擅长在“给定输入特征”的情况下预测标签。 每个“特征-标签”对都称为一个样本(example)。

  • 回归:当标签取任意数值时,我们称之为回归问题
  • 分类:多标签分类
  • 搜索:在信息检索领域,我们希望对一组项目进行排序。 首先为集合中的每个元素分配相应的相关性分数,然后检索评级最高的元素。
  • 推荐系统:目标是向特定用户进行“个性化”推荐。
  • 序列学习:要求模型需要拥有记忆功能。输入和输出都是可变长度的序列,例如机器翻译和从语音中转录文本。

无监督学习

数据中不含有“目标”的机器学习问题通常被为无监督学习(unsupervised learning)

  • 聚类(clustering)问题:没有标签的情况下,我们是否能给数据分类呢?
  • 主成分分析(principal component analysis)问题:我们能否找到少量的参数来准确地捕捉数据的线性相关属性?
  • 因果关系(causality)和概率图模型(probabilistic graphical models)问题:我们能否描述观察到的许多数据的根本原因?例如,如果我们有关于房价、污染、犯罪、地理位置、教育和工资的人口统计数据,我们能否简单地根据经验数据发现它们之间的关系?
  • 生成对抗性网络(generative adversarial networks)

强化学习:与环境互动

无论是有监督学习还是无监督学习,都会预先获取大量的数据。然后启动模型,不再与环境交互,称为“离线学习”。

强化学习(reinforcement learning)

在强化学习问题中,智能体(agent)在一系列的时间步骤上与环境交互。 在每个特定时间点,智能体从环境接收一些观察(observation),并且必须选择一个动作(action),然后通过某种机制(有时称为执行器)将其传输回环境,最后智能体从环境中获得奖励(reward)。 此后新一轮循环开始,智能体接收后续观察,并选择后续操作,依此类推。

强化学习的目标是产生一个好的策略(policy)。 强化学习智能体选择的“动作”受策略控制,即一个从环境观察映射到行动的功能。

预备知识

数据操作

节省内存

运行一些操作可能会导致为新结果分配内存。 例如,如果我们用Y = X + Y,我们将取消引用Y指向的张量,而是指向新分配的内存处的张量。

我们一般不希望这样,因为:

  1. 我们不想总是不必要地分配内存,希望原地执行更新。
  2. 如果不原地更新,代码有可能会引用旧的参数。

如果进行原地操作:

使用切片:Y[:]=

Z = torch.zeros_like(Y)
print('id(Z):', id(Z))
Z[:] = X + Y
print('id(Z):', id(Z))
输出:
id(Z): 139931132035296
id(Z): 139931132035296

如果在后续计算中没有重复使用X, 我们也可以使用X[:] = X + YX += Y来减少操作的内存开销。

转换为其他对象

torch张量和numpy数组将共享它们的底层内存,就地操作更改一个张量也会同时更改另一个张量。

import numpy
import torch

X = torch.ones(2,2)
Y = X.numpy()
Y[0][0] = 2
print(X)
print(Y)

深度学习笔记_第1张图片

你可能感兴趣的:(深度学习,深度学习,人工智能)