什么是迁移学习 (Transfer Learning)?这个领域历史发展前景 ...

[Copy link]
see3965 | reply19 | 2021-10-7 11:46:38 | 显示全部楼层 |Reading mode
2018.1. 二次更新 / 重点介绍迁移学习和其相关方向,完整删除之前的答案,并重新规整了迁移学习内容和代表性文章。
<hr/>What is?/为什么要迁移学习?

迁移学习(Transfer learning) 顾名思义就是就是把已学训练好的模型参数迁移到新的模型来帮助新模型训练。考虑到大部分数据或任务是存在相关性的,所以通过迁移学习我们可以将已经学到的模型参数(也可理解为模型学到的知识)通过某种方式来分享给新模型从而加快并优化模型的学习效率不用像大多数网络那样从零学习(starting from scratch,tabula rasa)。
迁移学习的粗略介绍

As early as2009Year,Sinno Jialin Pan and Qiang Yang 就发表了一篇迁移学习的survey [link]。他们将迁移学习通过Source (迁移源) / Target (迁移目标) Domain Label 更细节的分支为以下几个方向:


并给出了数学定义:
Given a source domain and learning task  , a target domain and learning task , transfer learning aims to help improve the learning of the target predictive function in using the knowledge in and  , where , or .
Inductive Transfer Learning
Inductive 的语义解释为归纳,我们可以直接理解为学习适用于Target Domain的网络特征。尤其注意,在 inductive 的迁移学习里,我们有 Target Domain Of Ground Truth Label,这就意味着我们想要迁移的数据所在 Domain 将直接会学习网络和其特征提供指导作用(假设用深度学习方法,则通过Back-progagation方式)。
Self-Taught Learning
Self-Taught Learning 若直接放在现在深度学习的背景下意义并不明。根据原作者引用的文献来看,他们先从网络上下载大量的图片,通过 Sparse Coding 的方式学习通用普世的图片特征,再直接从中找给定的任务比如图片分类所用的图片特征来做迁移学习。(注意文章发表于09年前,所以那时候 Sparse Coding 的热潮相当于现在 Deep Learning 的热潮)
我们把这个思想放在现在的深度学习上,有点类同于通过 ImageNet 或其他大型数据集学习到的网络特征运用于一个图片分类或其他基于图片特征的任务。
而基于 pre-trained model 的网络训练对于 train-from-scratch 的提升有多少,相信大家对于不同的实验任务里有自己的经验。但不可否认,在绝大多数的情况下,有 ImageNet pre-trained 训练的模型在泛化能力上有或多或少的提升。其中有一篇论文也论述了好的初始值对于模型训练的重要性:[ALL YOU NEED IS A GOOD INIT]
由于神经网络训练局限于一个性质叫 Catastrophic Forgetting,意思是如果我们将 pre-trained 的模型作为初始值训练一个全新的任务,模型之前学习到的特征将灾难性遗忘,也意味着之前网络训练的任务结果将非常糟糕。
由于这一的性质,所有单一基于最原始的深度学习的任务看上去都像暴力求解,只适用于特定任务,并无法得到像人类一样通向普世的学习特征。
当然,也有部分工作尝试寻找解决 Catastrophic Forgetting 的方法,认知度较高的是:
    Progressive Neural Networks - adopt Lateral Connection 的方式将一学习好的模型参数通过另一层网络教给一个新的任务。由于在网络设计中,已训练完成的模型将会被 Freeze 因此在 back-propagation 优化参数的方式并不影响已学习完成的网络。这种网络设计很自然的避免了 Catastrophic Forgetting 的出现,但也引出了一些新的问题。
    不断的加入新的任务会引出新的网络分支,以及 lateral connection 分支,这种学习效率显然是很低的,因为我们一次只能学一个任务。我们无法确定先学哪个任务将会给后续的任务有一个最好的结果。i.e. 我们不清楚任何关于任务的相关和层级信息,因此找到最优方法需要 n 个任务的排列也就是 n! 种方式,再一次突出了学习效率之低。(better to learn from A -> B or B -> A?)



Progressive Neural Network / Visualisation

    Overcoming catastrophic forgetting in neural networks - 显然 DeepMind 自己也不会满足这样的网络设计,对此问题再次进行研究。这次他们不直接用于 Deep Learning Of back-propagation 方式而专注于 Bayesian Learning adopt Full Bayesian posterior distribution 来计算网络参数。他们的方法,Elastic Weight Consolidation (EWC), adopt Laplace Approximation 的方式来计算 Bayesian 那也无法进行数值计算的 log-likelihood,最后取得相当不错的效果。更多 comment 和介绍可参看这篇博文 [link].
Multi-task Learning
多任务学习 (multi-task learning) 与上个章节介绍的方向最大的不同是我们需要把 Source and Target 两个或者更多任务同时学好。在多任务学习中,任一任务的训练目标都是同等重要的。因此,这里 Source/Target Domain 的分类姑且没有太大意义(除非特定情况)。
进行多任务学习我们主要希望观察并研究:
    多任务学习是否可以帮助网络学习一个泛化能力更好的特征?通过多任务学习,我们能否寻找并理解不同任务的相关性和层级性?
最简单直接的多任务学习网络就是直接应用一个普通的网络结构在最后输出层前分叉到不同的任务预测层。而这样的设计真的可以帮助网络学习到好的特征么?
    Cross-stitch Networks for Multi-task Learning - 这篇文章就直接暴力了测试了所有分叉的可能性,并指出不同的任务在不同的分叉上效果。后续他们提出了一个叫 Cross-Stitch Network 的网络结构,通过矩阵中 linear combination 的方式来融合不同任务里学到的特征。


    Multi-task Self-Supervised Visual Learning - 类似的想法也出现在 Zisserman 最新的文章里。与 Cross-stitch Network 最大的不同是,这篇文章里并未将不同的任务分成不同的网络分支,而使用单一的网络结构,仅仅在基于 ResNet-101 的网络结构尾部 block 3 里的 23individual residual unit adopt sparse linear combination的方式来输出各自的任务预测层。
除了网络设计,多任务学习中还有一个 Open Question 就是,如何寻找训练权重?
由于任务难度和数据集不同的缘故,在进行多任务学习中,有一种情况是网络中学到的特征被某一任务 dominate。一个简单的例子:我们同时训练 MNIST and ImageNet。由于我们知道MNIST是一个极其简单的数据集,而ImageNet是一个数据量大且复杂的多的数据集。那么模型训练将飞快的收敛 MNIST 的识别任务,且慢慢变成是基于 MNIST 特征网络的初始值的 ImageNet 训练。
近期 Kaiming He 提出的 Focal Loss for Dense Object Detection 重新刷新了我们对分类和识别任务的认知,尤其对 gradient propagation 的重要性有了新的理解。那么我们能否也找到一种类似的改进 loss function 的方法来帮助网络去训练一个 unbiased feature representation What about it?
    Multi-Task Learning Using Uncertainty to Weigh Losses for Scene Geometry and Semantics - 这篇文章就探讨了这个问题,提出了同样基于 Bayesian Of maximise log-likelihood 来优化 loss function.GRADNORM: GRADIENT NORMALIZATION FOR ADAPTIVE LOSS BALANCING IN DEEP MULTITASK NETWORKS - 在最新的 ICLR 2017 会议中也出现了一篇文章讨论这个问题。他们的方法更偏向于解决:如何数值定义什么是一个 easy task。文章的观点是在每个training step,如果你的 training loss 相比较 step 0 Of training loss 越小,那么就越可能是 easy step. 以此通过计算 relative training rate 来更新每个任务的权重。
about Multi-task Learning 的更多介绍可参考这个博文:An Overview of Multi-Task Learning for Deep Learning.
Transductive Transfer Learning
Transductive 的字面意思是转导,通常来说要比 inductive transfer learning 要难的多。由于直接缺乏 Target Domain Label,在这个情况,我们只能依赖于 Source Domain 信息来尽可能的训练出泛化能力强的特征。
Domain Adaptation / Generalisation
Domain Adaptation 目标是学习 domain-invariant feature 使得学习到的特征不受限于 Source Domain 而导致 over-fitting。其主要会测试于 Office Dataset - Domain Adaptation - UC Berkeley,其中分为三个 Domain 其一是 Amazon 上扒的图片,另外两个是实体拍摄图片但一个高分辨率一个是低分辨率。
比较具有代表性的作品:
    Unsupervised Domain Adaptation by Backpropagation - 个人很喜欢这篇文章。这篇文章的新颖点是利用 classifier stay Source and Target Domain 的相似性,通过 Source Domain Of back-propagation 同时算出 Source and Target Domain Of gradient 并将两者梯度结合来更新 feed-forward Of feature extractor 。这样的设计会将 feature extractor 在没有 Target Label 的情况下也能学会 Target Domain Of feature.Learning Transferable Features with Deep Adaptation Networks - 本文作者是清华大学的 Mingsheng Long 也是 Domain Adaptation 的专家,可从 Google Scholar 上看出他的近乎所有文章都在研究这个问题。这篇文章包括作者后续的文章里都用到了一个叫作 max mean discrepancies  (MMD) 定义为 Source Target Domain Of feature 距离方式。将此距离包含于 loss function 会有助于网络避免出现 co-variant shift 使得学习到的特征是 domain-invariant.
因此不可否认,现在尝试解决 Domain Adaptation 的方法都不得不利用 Target Domain 的信息去缩小 co-variant shift. 完全只利用于 Source Domain 的信息仍然是个重要的课题。
Unsupervised Transfer Learning
在这个方向可适用于的任务非常有限,比如 Dimension Reduction。由于缺乏 Source Label 因此也无法采用绝大部分的 Deep Learning 方法,(但比如Auto-encoder 是其中一个基于 Deep Learning 的降维方式,但很难归类于 Transfer Learning)。因此这里不展开讨论了。
关于迁移学习大致概括到此为止,更多相关文献希望读者直接找相关的论文研读。
后面是我提出一些公开问题,让大家重新思考迁移学习的意义和重要性。
重新思考1:迁移学习一定有用吗?

事实上,即使在前文 survey 的数学定义里都提到了迁移学习是 "aim to improve"。但事实上,在特定情况下迁移学习甚至会产生相反的效果。这种情况叫 negative transfer。在进行迁移学习的时候,我们都默认不同的任务具备相关性,但如何定义相关性,如何数学描述任务之间相关性的强弱都是偏向人类的主观决定。我们经常使用 ImageNet As fine-tuning Of pre-trained model 因为 ImageNet 本身数据集之大保证了学习的网络有较高的泛化性,但如果用的小的数据集呢?结果还会一样么?还是会比从零学习的网络更差?
e.g. DeepMind 新出的 AlphaGo Zero 就是从零学习的比前一个版本基于人类图谱的 AlphaGo Lee 要强的多。
重新思考2:多任务学习一定在学通用的特征吗?

即使有相当多的实验结果表明,多任务学习比单任务学习的准确率较高,或者说泛化能力更强。但是多任务学习是否真正在学通用的特征我们无从得知。也有可能多任务学习仅仅是部分神经元负责负责特定网络,由于这多任务的分配导致网络结构比单任务小了而提高准确度我们也可说不是不可能。如何理解多任务网络结构,如何观察并确认特征的泛化能力也是一个重要的问题。
一些总结和展望

迁移学习无疑是机器学习里重要的问题之一。理解迁移学习不仅可以让我们理解学习到的特征而且让我们重新理解了神经网络”学习“的本质和方式。近期在迁移学习上的文章和研究不断的增多,但仍然有很多公开问题值得我们去挖掘和思考。希望这篇回答能给读者对迁移学习有着一定的认知,后期我会继续更新此回答如果有高价值的研究更新。

There are more resources in this post

What do you need Sign in Can I download or view it without an account?Join now Scan and login on wechat

x
Translated by the Internet, your translation resource information platform, pay attention to the official account [translation information]-Official account:fanyi899
贾华森 | 2021-10-7 11:46:58 | 显示全部楼层
2018.1. 二次更新 / 重点介绍迁移学习和其相关方向,完整删除之前的答案,并重新规整了迁移学习内容和代表性文章。
<hr/>What is?/为什么要迁移学习?

迁移学习(Transfer learning) 顾名思义就是就是把已学训练好的模型参数迁移到新的模型来帮助新模型训练。考虑到大部分数据或任务是存在相关性的,所以通过迁移学习我们可以将已经学到的模型参数(也可理解为模型学到的知识)通过某种方式来分享给新模型从而加快并优化模型的学习效率不用像大多数网络那样从零学习(starting from scratch,tabula rasa)。
迁移学习的粗略介绍

As early as2009Year,Sinno Jialin Pan and Qiang Yang 就发表了一篇迁移学习的survey [link]。他们将迁移学习通过Source (迁移源) / Target (迁移目标) Domain Label 更细节的分支为以下几个方向:


并给出了数学定义:
Given a source domain and learning task  , a target domain and learning task , transfer learning aims to help improve the learning of the target predictive function in using the knowledge in and  , where , or .
Inductive Transfer Learning
Inductive 的语义解释为归纳,我们可以直接理解为学习适用于Target Domain的网络特征。尤其注意,在 inductive 的迁移学习里,我们有 Target Domain Of Ground Truth Label,这就意味着我们想要迁移的数据所在 Domain 将直接会学习网络和其特征提供指导作用(假设用深度学习方法,则通过Back-progagation方式)。
Self-Taught Learning
Self-Taught Learning 若直接放在现在深度学习的背景下意义并不明。根据原作者引用的文献来看,他们先从网络上下载大量的图片,通过 Sparse Coding 的方式学习通用普世的图片特征,再直接从中找给定的任务比如图片分类所用的图片特征来做迁移学习。(注意文章发表于09年前,所以那时候 Sparse Coding 的热潮相当于现在 Deep Learning 的热潮)
我们把这个思想放在现在的深度学习上,有点类同于通过 ImageNet 或其他大型数据集学习到的网络特征运用于一个图片分类或其他基于图片特征的任务。
而基于 pre-trained model 的网络训练对于 train-from-scratch 的提升有多少,相信大家对于不同的实验任务里有自己的经验。但不可否认,在绝大多数的情况下,有 ImageNet pre-trained 训练的模型在泛化能力上有或多或少的提升。其中有一篇论文也论述了好的初始值对于模型训练的重要性:[ALL YOU NEED IS A GOOD INIT]
由于神经网络训练局限于一个性质叫 Catastrophic Forgetting,意思是如果我们将 pre-trained 的模型作为初始值训练一个全新的任务,模型之前学习到的特征将灾难性遗忘,也意味着之前网络训练的任务结果将非常糟糕。
由于这一的性质,所有单一基于最原始的深度学习的任务看上去都像暴力求解,只适用于特定任务,并无法得到像人类一样通向普世的学习特征。
当然,也有部分工作尝试寻找解决 Catastrophic Forgetting 的方法,认知度较高的是:
    Progressive Neural Networks - adopt Lateral Connection 的方式将一学习好的模型参数通过另一层网络教给一个新的任务。由于在网络设计中,已训练完成的模型将会被 Freeze 因此在 back-propagation 优化参数的方式并不影响已学习完成的网络。这种网络设计很自然的避免了 Catastrophic Forgetting 的出现,但也引出了一些新的问题。
    不断的加入新的任务会引出新的网络分支,以及 lateral connection 分支,这种学习效率显然是很低的,因为我们一次只能学一个任务。我们无法确定先学哪个任务将会给后续的任务有一个最好的结果。i.e. 我们不清楚任何关于任务的相关和层级信息,因此找到最优方法需要 n 个任务的排列也就是 n! 种方式,再一次突出了学习效率之低。(better to learn from A -> B or B -> A?)



Progressive Neural Network / Visualisation

    Overcoming catastrophic forgetting in neural networks - 显然 DeepMind 自己也不会满足这样的网络设计,对此问题再次进行研究。这次他们不直接用于 Deep Learning Of back-propagation 方式而专注于 Bayesian Learning adopt Full Bayesian posterior distribution 来计算网络参数。他们的方法,Elastic Weight Consolidation (EWC), adopt Laplace Approximation 的方式来计算 Bayesian 那也无法进行数值计算的 log-likelihood,最后取得相当不错的效果。更多 comment 和介绍可参看这篇博文 [link].
Multi-task Learning
多任务学习 (multi-task learning) 与上个章节介绍的方向最大的不同是我们需要把 Source and Target 两个或者更多任务同时学好。在多任务学习中,任一任务的训练目标都是同等重要的。因此,这里 Source/Target Domain 的分类姑且没有太大意义(除非特定情况)。
进行多任务学习我们主要希望观察并研究:
    多任务学习是否可以帮助网络学习一个泛化能力更好的特征?通过多任务学习,我们能否寻找并理解不同任务的相关性和层级性?
最简单直接的多任务学习网络就是直接应用一个普通的网络结构在最后输出层前分叉到不同的任务预测层。而这样的设计真的可以帮助网络学习到好的特征么?
    Cross-stitch Networks for Multi-task Learning - 这篇文章就直接暴力了测试了所有分叉的可能性,并指出不同的任务在不同的分叉上效果。后续他们提出了一个叫 Cross-Stitch Network 的网络结构,通过矩阵中 linear combination 的方式来融合不同任务里学到的特征。


    Multi-task Self-Supervised Visual Learning - 类似的想法也出现在 Zisserman 最新的文章里。与 Cross-stitch Network 最大的不同是,这篇文章里并未将不同的任务分成不同的网络分支,而使用单一的网络结构,仅仅在基于 ResNet-101 的网络结构尾部 block 3 里的 23individual residual unit adopt sparse linear combination的方式来输出各自的任务预测层。
除了网络设计,多任务学习中还有一个 Open Question 就是,如何寻找训练权重?
由于任务难度和数据集不同的缘故,在进行多任务学习中,有一种情况是网络中学到的特征被某一任务 dominate。一个简单的例子:我们同时训练 MNIST and ImageNet。由于我们知道MNIST是一个极其简单的数据集,而ImageNet是一个数据量大且复杂的多的数据集。那么模型训练将飞快的收敛 MNIST 的识别任务,且慢慢变成是基于 MNIST 特征网络的初始值的 ImageNet 训练。
近期 Kaiming He 提出的 Focal Loss for Dense Object Detection 重新刷新了我们对分类和识别任务的认知,尤其对 gradient propagation 的重要性有了新的理解。那么我们能否也找到一种类似的改进 loss function 的方法来帮助网络去训练一个 unbiased feature representation What about it?
    Multi-Task Learning Using Uncertainty to Weigh Losses for Scene Geometry and Semantics - 这篇文章就探讨了这个问题,提出了同样基于 Bayesian Of maximise log-likelihood 来优化 loss function.GRADNORM: GRADIENT NORMALIZATION FOR ADAPTIVE LOSS BALANCING IN DEEP MULTITASK NETWORKS - 在最新的 ICLR 2017 会议中也出现了一篇文章讨论这个问题。他们的方法更偏向于解决:如何数值定义什么是一个 easy task。文章的观点是在每个training step,如果你的 training loss 相比较 step 0 Of training loss 越小,那么就越可能是 easy step. 以此通过计算 relative training rate 来更新每个任务的权重。
about Multi-task Learning 的更多介绍可参考这个博文:An Overview of Multi-Task Learning for Deep Learning.
Transductive Transfer Learning
Transductive 的字面意思是转导,通常来说要比 inductive transfer learning 要难的多。由于直接缺乏 Target Domain Label,在这个情况,我们只能依赖于 Source Domain 信息来尽可能的训练出泛化能力强的特征。
Domain Adaptation / Generalisation
Domain Adaptation 目标是学习 domain-invariant feature 使得学习到的特征不受限于 Source Domain 而导致 over-fitting。其主要会测试于 Office Dataset - Domain Adaptation - UC Berkeley,其中分为三个 Domain 其一是 Amazon 上扒的图片,另外两个是实体拍摄图片但一个高分辨率一个是低分辨率。
比较具有代表性的作品:
    Unsupervised Domain Adaptation by Backpropagation - 个人很喜欢这篇文章。这篇文章的新颖点是利用 classifier stay Source and Target Domain 的相似性,通过 Source Domain Of back-propagation 同时算出 Source and Target Domain Of gradient 并将两者梯度结合来更新 feed-forward Of feature extractor 。这样的设计会将 feature extractor 在没有 Target Label 的情况下也能学会 Target Domain Of feature.Learning Transferable Features with Deep Adaptation Networks - 本文作者是清华大学的 Mingsheng Long 也是 Domain Adaptation 的专家,可从 Google Scholar 上看出他的近乎所有文章都在研究这个问题。这篇文章包括作者后续的文章里都用到了一个叫作 max mean discrepancies  (MMD) 定义为 Source Target Domain Of feature 距离方式。将此距离包含于 loss function 会有助于网络避免出现 co-variant shift 使得学习到的特征是 domain-invariant.
因此不可否认,现在尝试解决 Domain Adaptation 的方法都不得不利用 Target Domain 的信息去缩小 co-variant shift. 完全只利用于 Source Domain 的信息仍然是个重要的课题。
Unsupervised Transfer Learning
在这个方向可适用于的任务非常有限,比如 Dimension Reduction。由于缺乏 Source Label 因此也无法采用绝大部分的 Deep Learning 方法,(但比如Auto-encoder 是其中一个基于 Deep Learning 的降维方式,但很难归类于 Transfer Learning)。因此这里不展开讨论了。
关于迁移学习大致概括到此为止,更多相关文献希望读者直接找相关的论文研读。
后面是我提出一些公开问题,让大家重新思考迁移学习的意义和重要性。
重新思考1:迁移学习一定有用吗?

事实上,即使在前文 survey 的数学定义里都提到了迁移学习是 "aim to improve"。但事实上,在特定情况下迁移学习甚至会产生相反的效果。这种情况叫 negative transfer。在进行迁移学习的时候,我们都默认不同的任务具备相关性,但如何定义相关性,如何数学描述任务之间相关性的强弱都是偏向人类的主观决定。我们经常使用 ImageNet As fine-tuning Of pre-trained model 因为 ImageNet 本身数据集之大保证了学习的网络有较高的泛化性,但如果用的小的数据集呢?结果还会一样么?还是会比从零学习的网络更差?
e.g. DeepMind 新出的 AlphaGo Zero 就是从零学习的比前一个版本基于人类图谱的 AlphaGo Lee 要强的多。
重新思考2:多任务学习一定在学通用的特征吗?

即使有相当多的实验结果表明,多任务学习比单任务学习的准确率较高,或者说泛化能力更强。但是多任务学习是否真正在学通用的特征我们无从得知。也有可能多任务学习仅仅是部分神经元负责负责特定网络,由于这多任务的分配导致网络结构比单任务小了而提高准确度我们也可说不是不可能。如何理解多任务网络结构,如何观察并确认特征的泛化能力也是一个重要的问题。
一些总结和展望

迁移学习无疑是机器学习里重要的问题之一。理解迁移学习不仅可以让我们理解学习到的特征而且让我们重新理解了神经网络”学习“的本质和方式。近期在迁移学习上的文章和研究不断的增多,但仍然有很多公开问题值得我们去挖掘和思考。希望这篇回答能给读者对迁移学习有着一定的认知,后期我会继续更新此回答如果有高价值的研究更新。

There are more resources in this post

What do you need Sign in Can I download or view it without an account?Join now Scan and login on wechat

x
Translated by the Internet, your translation resource information platform, pay attention to the official account [translation information]-Official account:fanyi899
我最近在研究这个方向,一个比较重要的误区是总是有人把Transfer Learning和神经网络的训练联系起来,这两个概念刚开始是无关的。Transfer Learning是机器学习的分支,很多方法其实是不需要用NN的,而现在之所以Transfer Learning和神经网络联系如此紧密,主要因为NN的发展太快,太强大,太火爆,导致Transfer Learning的研究都往神经网络靠了。
----------------------------------------------------------------------------------------------------------------------
Transfer Learning的初衷是节省人工标注样本的时间,让模型可以通过已有的标记数据(source domain data)向未标记数据(target domain data)迁移。从而训练出适用于target domain的模型。我在某篇论文当中引用了一些图片来帮助大家更好的理解:



上图是某行人检测任务数据集当中的4张图片,假设前两张正对着摄像机的行人作为训练集,后两张背对着的行人图片作为测试集,结果该模型的测试评分会很差,因为训练时没有考虑到摄像机观察角引起的问题,相类似在图像识别领域会有很多因素会降低识别率(例如光照,背景等)。ok,那能否用一些未标记的图片(类似图3,4这样的图),增强我们的行人检测模型,让它不仅可以识别正对着的行人,还可以识别背对着的行人?这就是迁移学习要干的事。
既然说到这个问题,就不得不提domain adaptation了,domain adaptation是迁移学习原先就有的概念,在研究source domainandtarget domain时,基于某一特征,会发现两个domain的数据分布差别很大,比如说选择某一区域的颜色信息作为图像特征,下图红线表示source dataset的颜色信息值分布,蓝线表示target dataset的颜色信息值分布,很明显对于这一特征来讲,两个域的数据本来就是有shift的。而这个shift导致我们evaluate这个模型的时候准确率会大大降低。


既然这个特征不合适,那我们就换特征,没错,domain adaptation旨在利用各种的feature transformation手段,学习一个域间不变的特征表达,基于这一特征,我们就可以更好的同时对两个域的数据进行分类了。
----------------------------------------------------------------------------------------------------------------------
至于发展前景,题主可以关注最近的论文,虽然有了迁移学习的帮助,但是大部分论文都会尽量去化简网络从而减少数据的需求量,由此来看,transfer learning并没有很好的解决样本标注的困难,就我来看,迁移学习距离成功还很远,有待进一步发展和提高。
迁移学习领域有一篇公认的比较好的综述,楼上都已经说了:A Survey on Transfer Learning
对于这篇论文我做了翻译和整理,如果你刚入门transfer learning,可以去这里下载这个文档:
迁移学习综述a survey on transfer learning的整理
我概括了论文当中精华的部分,并且加上了自己的理解,对迁移学习整体的研究做了概述。
到这还没完!!相信你也看到了这篇论文是很早以前的(2013),里面没有介绍最新的研究,实际上近几年迁移学习的变化是很大的,特别是deep neural network的发展让很多学者开始挖掘深度神经网络模型的迁移能力。
为什么深度神经网络模型具有强大的可迁移能力?回答这一点需要了解DNN的原理,DNN是一个通过pre-train获得数据的分层特征表达,然后用高层语义分类的模型,模型的底层是低级语义特征(比如说,边缘信息,颜色信息等),这样的特征实际上在不同的分类任务中都是不变的,而真正区别的是高层特征,这也解释了通常使用新的数据集去更新AlexNet,GoogleNet的最后几层网络权值,来实现简单的“迁移”这个小trick。具体细节可以参考这两篇论文:
Yosinski, J., Clune, J., Bengio, Y., and Lipson, H. How transfer-able are features in deep neural networks? In NIPS, 2014.
J. Donahue, Y. Jia, O. Vinyals, J. Hoffman, N. Zhang, E. Tzeng, and T. Darrell. Decaf: A deep convolutional activation feature for generic visual recognition. In ICML, 2014.
近两年迁移学习的发展很迅速,基于domain adapation这个方向,有不少和深度神经网络相结合的transfer模型,怎么结合的,具体就不做详细介绍了。基本思想都类似,为了保证域差异最小,loss项都会加一个MMD约束。
贴几篇论文:
Deep Transfer Network: Unsupervised Domain Adaptation
Learning Transferable Features with Deep Adaptation Networks
Unsupervised Domain Adaptation by Backpropagation
Unsupervised Domain Adaptation with Residual Transfer Networks(这篇文章我特别推荐一下,它打破了传统用一个分类器处理跨域数据,并首次提出用Residual Function来区分source classifierandtarget classifier)

There are more resources in this post

What do you need Sign in Can I download or view it without an account?Join now Scan and login on wechat

x
Translated by the Internet, your translation resource information platform, pay attention to the official account [translation information]-Official account:fanyi899
艺记醒 | 2021-10-7 11:47:54 | 显示全部楼层
(可能是有史以来)最全的迁移学习资料:jindongwang/transferlearning
迁移学习(transfer learning)通俗来讲,就是运用已有的知识来学习新的知识,核心是找到已有知识和新知识之间的相似性,用成语来说就是举一反三。由于直接对目标域从头开始学习成本太高,我们故而转向运用已有的相关知识来辅助尽快地学习新知识。比如,已经会下中国象棋,就可以类比着来学习国际象棋;已经会编写Java程序,就可以类比着来学习C#;已经学会英语,就可以类比着来学习法语;等等。世间万事万物皆有共性,如何合理地找寻它们之间的相似性,进而利用这个桥梁来帮助学习新知识,是迁移学习的核心问题。

具体地,在迁移学习中,我们已有的知识叫做源域(source domain),要学习的新知识叫目标域(target domain)。迁移学习研究如何把源域的知识迁移到目标域上。特别地,在机器学习领域中,迁移学习研究如何将已有模型应用到新的不同的、但是有一定关联的领域中。传统机器学习在应对数据的分布、维度,以及模型的输出变化等任务时,模型不够灵活、结果不够好,而迁移学习放松了这些假设。在数据分布、特征维度以及模型输出变化条件下,有机地利用源域中的知识来对目标域更好地建模。另外,在有标定数据缺乏的情况下,迁移学习可以很好地利用相关领域有标定的数据完成数据的标定。
迁移学习按照学习方式可以分为基于样本的迁移,基于特征的迁移,基于模型的迁移,以及基于关系的迁移。基于样本的迁移通过对源域中有标定样本的加权利用完成知识迁移;基于特征的迁移通过将源域和目标域映射到相同的空间(或者将其中之一映射到另一个的空间中)并最小化源域和目标域的距离来完成知识迁移;基于模型的迁移将源域和目标域的模型与样本结合起来调整模型的参数;基于关系的迁移则通过在源域中学习概念之间的关系,然后将其类比到目标域中,完成知识的迁移。
理论上,任何领域之间都可以做迁移学习。但是,如果源域和目标域之间相似度不够,迁移结果并不会理想,出现所谓的负迁移情况。比如,一个人会骑自行车,就可以类比学电动车;但是如果类比着学开汽车,那就有点天方夜谭了。如何找到相似度尽可能高的源域和目标域,是整个迁移过程最重要的前提。
迁移学习方面,代表人物有香港科技大学的Qiang Yang教授,南洋理工大学的Sinno Jialin Pan,以及第四范式的CEO戴文渊等。代表文献是Sinno Jialin PanandQiang YangOfA survey on transfer learning.
Translated by the Internet, your translation resource information platform, pay attention to the official account [translation information]-Official account:fanyi899
joanne941 | 2021-10-7 11:48:30 | 显示全部楼层
1. preface


迁移学习(Transfer Learning,TL)对于人类来说,就是掌握举一反三的学习能力。比如我们学会骑自行车后,学骑摩托车就很简单了;在学会打羽毛球之后,再学打网球也就没那么难了。对于计算机而言,所谓迁移学习,就是能让现有的模型算法稍加调整即可应用于一个新的领域和功能的一项技术。

不久前,香港科技大学的杨强教授在机器之心GMIS大会中回顾AlphaGo和柯洁的围棋大战时曾说,AlphaGo 看上去像神一样的存在,好像是无懈可击,而我们如果从机器学习的角度来看,它还是有弱点的,而且这个弱点还很严重。这个弱点即,AlphaGo不像人类一样有迁移学习的能力。它不能在学会围棋后,迁移到拥有下象棋的能力,这一局限性需要迁移学习来攻破。另一位大牛吴恩达在NIPS 2016 tutorial中也曾表示非常看好迁移学习的应用前景。他认为迁移学习将是监督学习之后的,在ML的商业应用中得到成功的下一波动力。现实世界纷繁复杂,包含众多场景。迁移学习可以帮助我们透过现象抓住问题共性,巧妙处理新遇到的问题。

传统机器学习通常有两个基本假设,即训练样本与测试样本满足独立同分布的假设和必须有足够可利用的训练样本假设。然而,现实生活中这两个基本假设有时往往难以满足。比如,股票数据的时效性通常很强,利用上个月数据训练出来的模型,往往很难顺利地运用到下个月的预测中去;比如公司开设新业务,但愁于没有足够的数据建立模型进行用户推荐。近年来在机器学习领域受到广泛关注的迁移学习恰恰解决了这两个问题。迁移学习用已有的知识来解决目标领域中仅有少量有标签样本数据甚至没有数据的学习问题,从根本上放宽了传统机器学习的基本假设。由于被赋予了人类特有的举一反三的智慧,迁移学习能够将适用于大数据的模型迁移到小数据上,发现问题的共性,从而将通用的模型迁移到个性化的数据上,实现个性化迁移。

2. 迁移学习的一般化定义


    条件:给定一个源域Ds和源域上的学习任务Ts,目标域Dt和目标域上的学习任务Tt目标:用DsandTs学习目标域上的预测函数f(·)限制条件:Ds≠Dt,Ts≠Tt
3 迁移学习的分类


3.1 按特征空间分


    同构迁移学习(Homogeneous TL): 源域和目标域的特征空间相同,XS=XT异构迁移学习(Heterogeneous TL):源域和目标域的特征空间不同,XS≠XT
3.2 按迁移情景分


    归纳式迁移学习(Inductive TL):源域和目标域的学习任务不同直推式迁移学习(Transductive TL):源域和目标域不同,学习任务相同无监督迁移学习(Unsupervised TL):源域和目标域均没有标签
4. 迁移学习的基本方法


    样本迁移(Instance based TL)

在源域中找到与目标域相似的数据,把这个数据的权值进行调整,使得新的数据与目标域的数据进行匹配。下图的例子就是找到源域的例子3,然后加重该样本的权值,使得在预测目标域时的比重加大。优点是方法简单,实现容易。缺点在于权重的选择与相似度的度量依赖经验,且源域与目标域的数据分布往往不同。




    特征迁移(Feature based TL)

假设源域和目标域含有一些共同的交叉特征,通过特征变换,将源域和目标域的特征变换到相同空间,使得该空间中源域数据与目标域数据具有相同分布的数据分布,然后进行传统的机器学习。优点是对大多数方法适用,效果较好。缺点在于难于求解,容易发生过适配。




    模型迁移(Parameter based TL)

假设源域和目标域共享模型参数,是指将之前在源域中通过大量数据训练好的模型应用到目标域上进行预测,比如利用上千万的图象来训练好一个图象识别的系统,当我们遇到一个新的图象领域问题的时候,就不用再去找几千万个图象来训练了,只需把原来训练好的模型迁移到新的领域,在新的领域往往只需几万张图片就够,同样可以得到很高的精度。优点是可以充分利用模型之间存在的相似性。缺点在于模型参数不易收敛。




    关系迁移(Relation based TL)

假设两个域是相似的,那么它们之间会共享某种相似关系,将源域中逻辑网络关系应用到目标域上来进行迁移,比方说生物病毒传播到计算机病毒传播的迁移。




5. 迁移学习的应用场景


5.1 迁移学习的理论研究价值


    解决标注数据稀缺性

大数据时代亿万级别规模的数据导致数据的统计异构性、标注缺失问题越来越严重。标注数据缺失会导致传统监督学习出现严重过拟合问题。目前解决数据稀缺性的方法有传统半监督学习、协同训练、主动学习等,但这些方法都要求目标域中存在一定程度的标注数据,而在标注数据稀缺的时候额外获取人工标注数据的代价太大。这时需要迁移学习来辅助提高目标领域的学习效果。

    非平稳泛化误差分享

经典统计学习理论给出了独立同分布条件下模型的泛化误差上界保证。而在非平稳环境(不同数据域不服从独立同分布假设)中,传统机器学习理论不再成立,这给异构数据分析挖掘带来了理论风险。从广义上看,迁移学习可以看做是传统机器学习在非平稳环境下的推广。因此在非平稳环境下,迁移学习是对经典机器学习的一个重要理论补充。

5.2 迁移学习的实际应用


    训练机械臂

在真实的机器人上训练模型太慢,而且非常昂贵。解决办法是先进行模拟学习,将模拟学习学到的知识迁移到现实世界的机器人训练中,这里源域和目标域之间的特征空间是相同的。近年来该领域的研究又引发了许多人的兴趣。下图是谷歌DeepMind的工作:图左是在模拟环境下训练机械臂的移动,训练好之后,可以把知识迁移到现实世界的机械臂上,真实的机械臂稍加训练也可以达到非常好的效果,如下图右。
视频参见:https://www.youtube.com/watch?v=YZz5Io_ipi8




    舆情分析

迁移学习也可应用在舆情分析中的用户评价上。以电子产品和视频游戏产品用户评价为例,图中绿色为好评标签,而红色为差评标签。从图左的电子产品评价(源域)中抽取特征,建立电子产品评价领域的模型,然后将其应用到右图的视频游戏领域(目标域)中,实现舆情大规模的迁移,并且在新的领域不需要标签。




    推荐系统

迁移学习也可以用在推荐系统中,在某个领域做好一个推荐系统,然后应用在稀疏的、新的垂直领域。比如已成熟完善的电影推荐系统可以应用在冷启动中的书籍推荐系统中。




    个性化对话

先训练一个通用型的对话系统,然后再根据特定领域的小数据修正它,使得这个对话系统适应该特定领域的任务。比如,一个用户想买咖啡,他并不想回答所有繁琐的问题,例如是问要大杯小杯,热的冷的?




    数据生成式的迁移学习-GAN

生成式对抗网络(GAN)是一个新的机器学习的思想。GAN模型中的两位博弈方分别由生成式模型(generative model)和判别式模型(discriminative model)充当。生成模型G捕捉样本数据的分布,用服从某一分布(均匀分布,高斯分布等)的噪声z生成一个类似真实训练数据的样本,追求效果是越像真实样本越好;判别模型 D 是一个二分类器,估计一个样本来自于训练数据(而非生成数据)的概率,如果样本来自于真实的训练数据,D输出大概率,否则,D输出小概率。GAN的优化是一个极小极大博弈问题,最终的目的是generator的输出给discriminator时很难判断是真实or伪造的。

如果我们有一个很好的生成式模型,在某个数据集上已经训练好了,如果有一些新的数据,和前一个数据集有明显的区别,那么我们可以利用“GAN+边界条件”,把生成式模型迁移到新的数据分布上。比方说,我们写字的时候,每个人签名都是不同的,我们不会用印刷体来签名,因为我们每个人都有自己的写字的特点。那么,如果用大量的印刷体字作为第一部分的训练样本,来训练一个不错的通用模型,而用某个人手写的斜体字做第二部分的训练样本,就可以利用Wasserstein GAN把印刷体的模型迁移到个人的签名。也就是说,这样的签名也就更具个性化特点。




6. 迁移学习相关竞赛


    [Unsupervised and Transfer Learning Challenge] (http://www.causality.inf.ethz.ch/unsupervised-learning.php)[2007 IEEE ICDM Data Mining Contest Overview] (http://www.cse.ust.hk/~qyang/ICDMDMC07/)
7. 迁移学习代表性研究学者


开展迁移学习的研究可以从跟踪迁移学习代表性研究学者的成果着手。国内外迁移学习方面的代表人物有:
    香港科技大学的杨强教授第四范式的CEO [戴文渊] (https://scholar.google.com.sg/citations?user=AGR9pP0AAAAJ&hl=zh-CN)南洋理工大学的助理教授[Sinno Jialin Pan] (http://www.ntu.edu.sg/home/sinnopan/)中科院计算所副教授[庄福振] (http://www.intsci.ac.cn/users/zhuangfuzhen/)
8. 迁移学习工具包


    [Boosting for Transfer Learning] (http://www.cse.ust.hk/TL/code/C_TraDaBoost.rar), Wenyuan Dai,Qiang Yang, et al., Clanguage[Selective Transfer Between Learning Tasks Using Task-Based Boosting] (http://cs.brynmawr.edu/~eeaton/TransferBoost/TransferBoostExp.java), Eric Eaton and Marie desJardins, Java[Domain Adaptation in Natural Language Processing] (http://www.mysmu.edu/faculty/jingjiang/software/DALR.html), Jiang Jiang,C++[Triplex Transfer Learning: Exploiting both Shared and Distinct Concepts for Text Classification] (http://www.intsci.ac.cn/users/zhuangfuzhen/code&data_TriTL.rar), Fuzhen Zhuang , Ping Luo, et al.,Matlab[Heterogeneous Transfer Learning for Image Classification] (http://www.cse.ust.hk/~yinz/htl4ic.zip), Yin Zhu, Yuqiang Chen, et al.,Matlab[Domain Adaptation Toolbox] (https://github.com/viggin/domain-adaptation-toolbox), Ke Yan,Matlab
9. 参考资料


2017香港科技大学杨强机器之心GMIS峰会演讲
2016香港科技大学杨强KDD China技术峰会演讲
Sinno Jialin Pan and Qiang Yang, A survey on transfer learning
Karl Weiss, Taghi M. Khoshgoftaar and DingDing Wang, A survey of transfer learning
龙明盛,迁移学习问题与方法研究
注:上文部分图片摘自以上参考资料
作者:李中杰

There are more resources in this post

What do you need Sign in Can I download or view it without an account?Join now Scan and login on wechat

x
Translated by the Internet, your translation resource information platform, pay attention to the official account [translation information]-Official account:fanyi899
只是看闹热 | 2021-10-7 11:48:42 | 显示全部楼层


Part 1:什么是迁移学习?迁移学习的场景与应用。

depth | 迁移学习全面概述:从基本概念到相关研究
文章来源于http://sebastianruder.com,作者:Sebastian Ruder,有机器之心编译,原文链接点此即可跳转。
catalog:
1.什么是迁移学习?
2.为什么现在需要迁移学习?
3.迁移学习的定义
4.迁移学习的场景
5.迁移学习的应用
    从模拟中学习适应到新的域跨语言迁移知识
6.迁移学习的方法
    使用预训练的 CNN 特征学习域不变的表征让表征更加相似混淆域
7.相关的研究领域
    半监督学习更有效地使用可用的数据提高模型的泛化能力让模型更加稳健多任务学习持续学习zero-shot 学习
8.总结

近年来,我们越来越擅长训练深度神经网络,使其能从大量的有标签的数据中学习非常准确的输入到输出的映射,无论它们是图像、语句还是标签预测。
我们的模型仍旧极度缺乏泛化到不同于训练的环境的能力。什么时候需要这种能力呢?就是你每一次将你的模型用到现实世界,而不是精心构建的数据集的时候。现实世界是混乱的,并且包含大量全新的场景,其中很多是你的模型在训练的时候未曾遇到的,因此这又使得模型不足以做出好的预测。将知识迁移到新环境中的能力通常被称为迁移学习(transfer learning),这就是本文将讨论的内容。
在这篇文章中,我首先会将迁移学习与机器学习的最普遍和成功的范式——监督学习——做一下对比。然后我会概括一下迁移学习值得我们去关注的原因。随后,我会给出一个更加技术性的定义以及介绍多个不同的迁移学习的场景。然后,我会提供一些迁移学习的应用的例子,再探究一些可以被用来迁移知识的实际方法。最后,我会概述一下相关的研究方向,并展望一下未来的前景。

什么是迁移学习?

在机器学习的经典监督学习场景中,如果我们要针对一些任务和域 A 训练一个模型,我们会假设被提供了针对同一个域和任务的标签数据。我们可以在图 1 中清楚地看到这一点,其中我们的模型 A 在训练数据和测试数据中的域和任务都是一样的(后面我会详细地定义什么是任务(task),以及什么是域(domain))。现在,让我们假设,一个任务就是我们的模型要去执行的目标,例如,识别图片中的物体;而域就是数据的来源,例如,来自于旧金山的咖啡店的照片。


图 1:机器学习领域中传统监督学习的设置

现在我们可以在这个数据集上训练一个模型 A,并期望它在同一个任务和域中的未知数据上表现良好。在另一种情况下,当给定一些任务或域 B 的数据时,我们还需要可以用来训练模型 B 的有标签数据,这些数据要属于同一个任务和域,这样我们才能预期能在这个数据集上表现良好。
当我们没有足够的来自于我们关心的任务或域的标签数据来训练可靠的模型时,传统的监督学习范式就支持不了了。
如果我们要训练一个模型来检测在夜间拍摄的照片上的行人,我们可以用一个在相似的域中训练的模型,例如白天拍摄的图片。然而,实际上,我们经常会遭遇表现上的衰退或者崩溃,因为模型已经继承了它的训练数据中的偏差,不知道如何泛化到新的域中。
如果我们要训练一个模型来执行新的任务,例如检测骑自行车的人,我们甚至不能够使用已有的模型,因为任务之间的标签都是不一样的。
迁移学习允许我们通过借用已经存在的一些相关的任务或域的标签数据来处理这些场景。我们尝试着把在源域中解决源任务时获得的知识存储下来,并将其应用在我们感兴趣的目标域中的目标任务上去,如图 2 所示。


图 2:迁移学习的设置

在实践中,我们力求将尽可能多的知识从源环境迁移到目标任务和域中。依据数据的不同,这种知识有不同的形式:它可以涉及物体是如何组成的,以允许我们更加容易地识别新的对象;也可以是关于人们用来表达观点的普通词汇,等等。

为什么现在需要迁移学习?

前百度首席科学家、斯坦福的教授吴恩达(Andrew Ng)在广受流传的 2016 year NIPS 会议的教程中曾经说过:「迁移学习将会是继监督学习之后的下一个机器学习商业成功的驱动力」。


图 3:吴恩达在 2016 year NIPS 上谈论迁移学习

特别地,他在白板上画了一个图表,我尽可能忠实地将它复制在如下所示的图 4 中(抱歉坐标轴没有详细的标注)。据吴恩达说,迁移学习将成为机器学习在产业界取得成功的一个关键驱动力。


图 4:吴恩达心中机器学习产业成功的驱动力

不容置疑,机器学习在产业界的应用和成功主要是受监督学习的驱动。受到深度学习中的进步、更强大的计算资源以及大量的标签数据集的推动,监督学习是人们对人工智能的兴趣复苏浪潮、多轮融资以及收购的主要原因,尤其是我们近年来看到的机器学习的应用,它们已经成为了我们生活的一部分。如果我们忽视关于另一个人工智能寒冬的怀疑和传言,并且相信吴恩达的预见,这种成功很可能会持续下去。
然而,不太清楚为什么已经存在了大约几十年并且至今在产业界很少被使用的迁移学习会出现吴恩达所预言的那种爆炸式增长。更有甚者,与机器学习的其他领域(如无监督学习和强化学习等)相比,迁移学习目前受到的关注更少。而且那些领域也正越来越受欢迎:无监督学习是实现通用人工智能的关键成分(如图 5 中 Yann LeCun 所说),人们对此兴趣已经复苏,尤其是在生成对抗网络(GAN)的推动下。反过来,强化学习在 Google DeepMind 的牵头下已经实现游戏 AI 的进步,AlphaGo 的成功堪称典范,并且也早已在现实世界中实现了成功,例如将 Google 数据中心的冷却费用降低了 40%。这两个领域虽然很有希望,但是在可预见的未来可能只会有着相对较小的商业影响力,并且大部分还停留在前沿研究论文的范围之内,因为它们仍然面临着许多挑战。


图 5:显然迁移学习没有出现在 Yann LeCun 的蛋糕成分问题中

什么使得迁移学习与众不同呢?下面我们会看一下在我看来驱使了吴恩达的预见的因素,并且总结一下现在正是重视迁移学习的时机的原因。
目前产业界对机器学习的应用分为两类:
一方面,在过去几年中,我们已经获得了训练越来越准确的模型的能力。我们现在所处的阶段,对很多任务而言,最先进的模型已经达到了这样的水平:它们的表现是如此的好以至于对使用者来说不再有障碍了。有多么好呢?最新的 ImageNet 上的残差网络 [1] 在进行物体识别时实现了超越人类的性能;Google Of Smart Reply 系统 [2] 可以处理所有移动手机中的回复的 10%;语音识别的错误率在持续降低,并且比键盘输入更加准确 [3];我们已经实现了和皮肤科医师一样好的自动皮肤癌识别;Google 的神经机器翻译系统(NMT)[4] 已被用在了超过 10 种以上的语言对的生产中;百度可以实时地生成逼真的语音;类似的还有很多很多。这种成熟度允许将这些模型大规模地部署到数百万的用户上,并且已经得到了广泛的采用。
另一方面,这些成功的模型都是极其地重视数据的,依靠大量的标签数据来实现它们的性能。对一些任务和域而言,经过了多年的精心收集,这种数据是可以得到的。在少数情况下,数据是公开的,例如 ImageNet[5],但是在很多语音或者 MT 的数据集中,大量的标签数据都是有专利的,或者是很昂贵的,因为它们在竞争中提供了前沿参考。
同时,把机器学习的模型应用在自然环境中时,模型会面临大量之前未曾遇到的条件,它不知道如何去处理;每一个用户都有他们自己的偏好,也需要处理和生成不同于之前用来训练的数据;要求模型执行很多和训练相关但是不相同的任务。在所有这些情况下,尽管我们最先进的模型在它们被训练的任务和域上展示出了和人类一样甚至超越人类的性能,然而还是遭遇了明显的表现下降甚至完全失败。
迁移学习可以帮助我们处理这些全新的场景,它是机器学习在没有大量标签数据的任务和域中规模化应用所必须的。到目前为止,我们已经把我们的模型应用在了能够容易获取数据的任务和域中。为了应对分布的长尾,我们必须学会把已经学到的知识迁移到新的任务和域中。
为了做到这个,我们需要理解迁移学习所涉及到的概念。基于这个原因,我会在下面的内容中给出更加技术性的定义。

迁移学习的定义

为了这个定义,我会紧密地遵循 Pan and Yang(2010) 所做的杰出的综述 [6],并以一个二元文档分类为例。
迁移学习涉及到域和任务的概念。一个域 D 由一个特征空间 X 和特征空间上的边际概率分布 P(X) 组成,其中 X=x1,…, xn∈X。对于有很多词袋表征(bag-of-words representation)的文档分类,X 是所有文档表征的空间,xi 是第 i 个单词的二进制特征,X 是一个特定的文档。(注:这里的 X 有两种不同的形式,这里不太好呈现,具体请参考原文。
给定一个域 D={X,P(X)},一个任务 T 由一个标签空间 y 以及一个条件概率分布 P(Y|X) 构成,这个条件概率分布通常是从由特征—标签对 xi∈X,yi∈Y 组成的训练数据中学习得到。在我们的文档分类的例子中,Y 是所有标签的集合(即真(True)或假(False)),yi 要么为真,要么为假。
给定一个源域 Ds,一个对应的源任务 Ts,还有目标域 Dt,以及目标任务 Tt,现在,迁移学习的目的就是:在 Ds≠Dt,Ts≠Tt 的情况下,让我们在具备来源于 Ds and Ts 的信息时,学习得到目标域 Dt 中的条件概率分布 P(Yt|Xt)。绝大多数情况下,假设可以获得的有标签的目标样本是有限的,有标签的目标样本远少于源样本。
由于域 D 和任务 T 都被定义为元组(tuple),所以这些不平衡就会带来四个迁移学习的场景,我们将在下面讨论。

迁移学习的场景

给定源域和目标域 Ds and Dt,其中,D={X,P(X)},并且给定源任务和目标任务 Ts and Tt,其中 T={Y,P(Y|X)}。源和目标的情况可以以四种方式变化,我们仍然以我们的文档分类的例子在下面描述:
    XS≠XT。源域和目标域的特征空间不同,例如,文档是用两种不同的语言写的。在自然语言处理的背景下,这通常被称为跨语言适应(cross-lingual adaptation)。P(Xs)≠P(Xt)。源域和目标域的边际概率分布不同,例如,两个文档有着不同的主题。这个情景通常被称为域适应(domain adaptation)。YS≠YT。两个任务的标签空间不同,例如,在目标任务中,文档需要被分配不同的标签。实际上,这种场景通常发生在场景 4 中,因为不同的任务拥有不同的标签空间,但是拥有相同的条件概率分布,这是极其罕见的,P(Ys|Xs)≠P(Yt|Xt)。源任务和目标任务的条件概率分布不同,例如,源和目标文档在类别上是不均衡的。这种场景在实际中是比较常见的,诸如过采样、欠采样以及 SMOTE[7] 这些方法被广泛应用。
在明白了与迁移学习相关的概念和常被用到的一些场景之后,我们将要介绍一些能够说明它的潜力的应用。

迁移学习的应用

从模拟中学习
一个非常令我兴奋并且我认为我们在将来会见到更多的迁移学习应用就是从模拟中学习。对很多依靠硬件来交互的机器学习应用而言,在现实世界中收集数据、训练模型,要么很昂贵,要么很耗时间,要么只是太危险。所以最好能以某些风险较小的其他方式来收集数据。
模拟是针对这个问题的首选工具,在现实世界中它被用来实现很多先进的机器学习系统。从模拟中学习并将学到的知识应用在现实世界,这是迁移学习场景 2 中的实例,因为源域和目标域的特征空间是一样的(仅仅依靠像素),但是模拟和现实世界的边际概率分布是不一样的,即模拟和目标域中的物体看上去是不同的,尽管随着模拟的逐渐逼真,这种差距会消失。同时,模拟和现实世界的条件概率分布可能是不一样的,因为模拟不会完全复制现实世界中的所有反应,例如,一个物理引擎不会完全模仿现实世界中物体的交互。


图 6:谷歌的自动驾驶车辆(来源: Google Research 博客)

从模拟中学习有利于让数据收集变得更加容易,因为物体可以容易地被限制和分析,同时实现快速训练,因为学习可以在多个实例之间并行进行。因此,这是需要与现实世界进行交互的大规模机器学习项目的先决条件,例如自动驾驶汽车。谷歌无人车的技术主管 Zhaoyin Jia 说,「如果你真的想做无人驾驶车,模拟是必需的」。Udacity 已经开源了它用来进行无人驾驶汽车工程纳米学位教学的模拟器,在图 7 中可以看到,OpenAI Of Universe 平台将可能允许用《侠盗飞车 5(GTA 5)》或者其他视频游戏来训练无人驾驶汽车。


图 7:Udacity 的无人驾驶汽车模拟器

另一个必需从模拟中学习的领域是机器人:在实际的机器人上训练模型是非常缓慢和昂贵的。从模拟中学习并且将知识迁移到现实世界的机器人上的方式能缓解这个问题,并且这种方面最近正得到越来越多的关注 [8]。图 8 中可以看到一个在现实世界和模拟中操作数据的一个例子。


图 8:机器人和模拟图片 (Rusu et al., 2016)

最后,另一个方向是通向通用人工智能的途径,其中模拟会是一个必需的组成部分。在现实世界中直接训练一个代理来实现通用人工智能的代价太高,并且不必要的复杂度还会在初始的时候阻碍训练。相反,如果基于诸如 CommAI-env [9] 的模拟环境的话,学习也许会更加成功,如图 9 所示。


图 9:Facebook 人工智能研究院的 CommAI-env (Mikolov et al., 2015)

适应到新的域
尽管从模拟中学习是域适应的一个特例,总结一些域适应的其他例子也是有价值的。
域适应在视觉中是一个常规的需求,因为标签信息易于获取的数据和我们实际关心的数据经常是不一样的,无论这涉及到如图 11 所示的识别自行车还是自然界中的其他物体。即使训练数据和测试数据看起来是一样的,训练数据也仍然可能包含人类难以察觉的偏差,而模型能够利用这种偏差在训练数据上实现过拟合 [10].


图 10:不同的视觉域 (Sun et al., 2016)

另一个常见的域适应场景涉及到适应不同的文本类型:标准的自然语言处理工具(例如词性标签器或者解析器)一般都是在诸如华尔街日报这种新闻数据上进行训练,这种新闻数据在过去都是用来评价这些模型的。然而,在新闻数据上训练出的模型面临挑战,难以应对更加新颖的文本形式,例如社交媒体信息。


图 11:不同的文本类型/风格

即使在产品评价这样的域中,人们采用不同的词汇和短语去表达同样的观点。因此,在一种类型的评论上训练出的模型应该能够解决人们使用的通用和特定领域的意见词,以免被域的变化所混淆。


图 12:不同的主题

最后,尽管以上的挑战都是处理一般的文本或者图像类型,如果我们考虑涉及到单个用户或者用户组的域,问题就被放大了:以自动语音识别(ASR)为例。语音指定会成为下一个大平台,据预测,到 2020 年,我们所有搜索的 50% 将会通过语音执行。大多数自动语音识别系统都在由 500 位说话人组成的标准数据集上进行传统测试。如此一来,大多数拥有标准口音的人则是幸运的,然而,移民、非标准口音的人、语音障碍的人以及儿童则会不容易被理解。现在比以往任何时候都需要能够适应个体用户和少数群体的系统,以确保每个人的声音都能被听懂。


图 13:不同的口音

跨语言迁移知识
最后,在我看来,迁移学习的另一个杀手级别的应用是将知识从一种语言迁移到另一种语言,我曾经在此处写过一篇关于跨语言环境的嵌入式模型的文章(博文链接:http://sebastianruder.com/cross-lingual-embeddings/index.html)。可靠的跨语言域的方法会允许我们借用大量的已有的英文标签数据并将其应用在任何一种语言中,尤其是没有足够服务且真正缺少资源的语言。已有的最先进的方法看起来仍然太过理想,但是以 zero-shot translate [11] 为例的最近的进展已在这个领域取得了快速的进步。
虽然到目前为止我们已经考虑过一些迁移学习的特殊应用,但是现在我们要研究一下文献中那些解决了一些挑战的实际方法和方向。

迁移学习的方法

在解决前文提及的四种迁移学习场景上,迁移学习拥有悠久的研究和技术的历史。深度学习的出现导致了一系列迁移学习的新方法,我们下面将会概览其中的一些。参考文献 [6] 可以看到一些早期方法的综述。

使用预训练的 CNN 特征
为了了解目前应用中最常见的迁移学习方式,我们必须理解在 ImageNet 上大型卷积神经网络所取得的杰出成功 [12].

理解卷积神经网络
虽然这些模型工作方式的许多细节仍然是一个谜,但我们现在已经意识到,较低的卷积层捕获低级图像特征,例如边缘(见图 14),而较高的卷积层捕获越来越复杂的细节,例如身体部位、面部和其他组合性特征。


图 14:AlexNet 学习得到的实例滤波器 (Krizhevsky et al., 2012)

最后的全连接层通常被认为是捕获了与解决相应任务相关的信息,例如 AlexNet 的全连接层可以指出哪些特征与在 1000 个物体类中分类一张图片相关的。
然而,尽管知道一只猫有胡须、爪子、毛皮等是将一个动物识别为猫所必需的(参见图 15),但它并不能帮助我们识别新物体或解决其他共同的视觉任务(如场景识别、细粒度识别、属性检测和图像检索)。


图 15:这篇博文的标志猫

然而,能够帮助我们的是捕获关于一幅图像是如何组成的以及它包括什么样的边缘和形状组合的通用信息。正如我们之前所描述的,这种信息被包含在在 ImageNet 上训练出的卷积神经网络的最后卷积层或者最后一层之前的全连接层。
所以,对于一个新任务,我们可以简单地使用这种由最先进的卷积神经网络在 ImageNet 上预训练出的现成特征,并在这些抽象的特征上面训练出新的模型。在实际中,我们要么保持预训练的参数固定不变,要么以一个较小的学习率来调节它们,以保证我们不会忘记之前学习到的知识。这个方法已经被证明可以在一系列的视觉任务 [13] 以及一些依靠图像作为输入的任务(例如看图说话)上实现出色的结果。在 ImageNet 上训练出的模型似乎能够捕获到关于动物以及物体的构造和组成方式的细节,这种方式通常在处理图像的时候是有价值的。因此,ImageNet 上的任务似乎对于一般的计算机视觉问题来说是一个很好的代理(proxy),因为在其中所需的相同知识也与许多其他任务相关。

学习图像的隐含结构
一个类似的假设被用来推动生成模型:当训练一个生成模型的时候,我们假设生成逼真图像的能力需要对图像隐含结构的理解,它反过来可以被用在很多其他任务中。这个假设本身也依赖一个前提,即所有图像都由一个低维度的流形结构决定,这就是说,可以用一个模型来抽象出图像的隐含结构。利用生成对抗网络来生成逼真图片的最新进展揭示,这种模型或许真的存在,如图 16 所示,卧室空间的点之间的逼真过渡证明了这个模型的能力。


图 16:行走在卧室的图像流形中

预训练的特征在视觉之外的领域有用吗?
现成的卷积神经网络特征在视觉任务上有着无出其右的结果,但是问题在于,使用其它的数据,在其它领域(例如语言)能否复制这种成功?目前,对自然语言处理而言没有能够实现与图像领域一样令人惊叹结果的现成特征。为什么呢?这样的特征是否存在呢?如果不存在,那为什么视觉比语言更有利于这种形式的迁移呢?
诸如词性标注或分块这类低级别任务的输出就可以被比作现成的特征,但是在没有语法学的帮助下,不能采集到更细粒度的特征。正如我们看到的,可概括的现成特征似乎存在似乎存在于众多任务中原型任务中。在视觉中,物体识别就占据了这样的地位。在语言中,最接近的类似物可能是语言建模:为了预测给定词汇序列中的下一个单词或者句子,模型需要处理语言是如何构造的知识,需要理解那些单词很可能是相关的,那些单词很可能是彼此跟随出现的,需要对长期依赖关系进行建模,等等。
尽管最先进的语言模型越来越接近人类的水平 [15],但是它们的功能使用是有限的。同时语言建模方面的进步已经为其他任务也带来了正面的结果:用语言模型的目标函数对一个模型进行预训练能够提升性能 [16]。此外,在一个大规模的无标签的语料库上用一个近似的语言模型目标函数进行预训练的单词嵌入已经变得普遍 [17]。虽然它们不如视觉中的现成特征那样有效,但仍然能够带来相当大的收益 [18],并且它们可以被看做是从大规模的无标签的语料库向通用域知识的一种简单形式的迁移。
尽管自然语言处理领域的通用代理任务(general proxy)在当前似乎是无法企及的,但是辅助任务可以采用局部代理的形式。不管是通过多任务目标 [19] 还是综合任务目标 [20,21],它们都可以被用来为模型增加更多的相关知识。
使用预训练特征是目前做迁移学习的最直接、最常用的方式。然而,到目前为止它并不是唯一的一种。

学习域不变的表征
在实际中,预训练特征通常被用在我们想适应的新任务的场景适应中 3。对其他场景而言,另一个由深度学习实现知识迁移的方式是学习基于域而不会改变的表征。这个方法在概念上和我们思考过的使用预训练的卷积神经网络特征非常相似:两者都只编码关于域的一般知识。然而,给非视觉任务创建基于特定域的不变表征要比为所有任务生成有用的表征要更加经济,更加可行。ImageNet 已经花费了多年、数千个小时来创建,然而为了创建域不变的表征,我们通常只需要每个域中的无标签数据。这种表征通常用大量的去噪自动解码器学习得到,而且已经在自然语言处理中取得了和视觉中一样的成功 [22,23].

让表征更加相似
为了提高学到的表征从源域到目标域的可迁移性,我们希望两个域之间的表征尽可能相似,这样一来,我们就不用考虑可能阻碍迁移的特定域的特征,只需要考虑域之间的共同点。
与其仅仅让我们的自动解码器学到一些表征,不如积极地激励以让两个域中的表征和彼此变得更加相似。我们可以像预处理步骤一样把这个直接应用在我们的数据表证过程中 [25,26],然后把新的表征用来训练。我们也可以促使我们的模型中的表征变得更加相似 [27,28].

混淆域
另一个最近变得流行的、用来确保两个域的表征之间相似性的方式就是在现有的模型上增加一个目标函数来鼓励两个域的混淆 [29,30]。这个域混淆的损失函数就是常规的分类损失函数,模型尝试预测输入样例的类别。然而,又和常规的损失函数有所不同,如图 17 所示,从损失函数到网络的剩余部分的流动是反向的。



图 17:用一个梯度反向层(gradient reversal layer)来混淆域。

梯度反向层会导致模型最大化误差,而不是学着去最小化域分类的损失函数的误差。在实际中,这意味着该模型会学习那些允许最小化原目标函数的表征,同时不允许区分两个域,这样有利于知识迁移。如图 18 所示,尽管仅仅使用常规的目标函数训练的模型可以基于它学到的表征清晰地区分两种域,但是用域方法增强的目标函数训练得到的模型却不能做到这一点。


图 18:常规模型和域混淆模型的域分类得分比较 (Tzeng et al, 2015)

相关的研究领域

尽管这篇博文是关于迁移学习的,但是到今天为止,迁移学习并不是唯一一个试图利用有限的数据、在新的任务上使用学到的知识、并让模型在新环境上具有较好的泛化能力的机器学习领域。所以,在下面的内容中,我们会介绍一些其他的与迁移学习相关或者能够补充迁移学习目标的方向。

半监督学习
迁移学习力图最大效率地使用某些任务或者域中的无标签数据。这也是半监督学习所恪守的准则,半监督学习遵循经典机器学习的设定,但是它仅仅采用有限数量的标签数据来训练。如此,半监督域适应本质上就是在域变化的情况下进行半监督学习。许多来自于半监督学习的教训和思想同样地适用于迁移学习。文献 [31] 是一个很不错的关于半监督学习的综述。

更有效地使用可用的数据
另外一个与迁移学习和半监督学习相关的方向是让模型在有限数量的数据上运行得更好。
这个可以用几种方式实现:你可以使用无监督学习或者半监督学习从无标签数据中抽取信息,以减少对有标签样本的依赖;你可以允许模型能够获取一些数据的固有属性,同时减轻正则化过程中的过拟合倾向;最后,你还可以使用至今仍然被忽视或者位于不明显的地方的一些数据。
作为用户生成内容的意外结果,这种巧合的数据 [32] 可能会被创建,例如能够提升命名实体和词性标注的超链接;它也可能作为注释的副产品存在,例如注释器不一致(annotator disagreement) 可能改进标注或者解析;或者来源于用户行为的数据,例如视线追踪或者键入变化,可以影响自然语言处理的任务。虽然这些数据只是以有限的方式被利用,但是这样的例子鼓励我们在意外的地方查找数据,并研究检索数据的新方法。

提高模型的泛化能力
让模型更好地泛化也是与此相关的一个方向。为了实现更好的泛化能力,我们首先必须理解大规模神经网络的行为和错综复杂的结构,并且去研究它们泛化的原因和方式。最近的工作已经朝着这个目标迈出了大有希望的步伐 [33],但是很多问题仍然等待解答。

让模型更加稳健(robust)
尽管提升我们的模型的泛化能力这方面已经比较成功了,在类似的例子上面我们也许泛化得很好,但是在出乎意料或者者非典型的输入情况下仍然会失败。所以,一个关键的补充目标就是让我们的模型更加稳健。在近来对抗学习的进步的推动下,这个方向越来越受关注,并且,最近的方法研究了很多让模型在最糟糕的情况下或者面对不同设置的对抗样本时变得更加稳健的方式 [34,35].

多任务学习
在迁移学习中,我们主要关心在我们的目标任务和域上友好的表现。相反,多任务学习中的目标是在所有可用的任务上都要表现良好,尽管某个标签数据通常都被假定在一个任务上。虽然多任务学习的方法没有直接用在迁移学习上,但是对多任务学习有利的关于任务的思想 [19] 仍然能够指引迁移学习的决策。

持续学习
虽然多任务学习允许我们在许多任务中保留知识,而不会对我们的源任务造成性能损失,但只有在所有任务都处于训练时间的情况下,这才是可能的。对于每个新任务,我们通常需要重新训练我们所有任务的模型。
然而,在现实世界中,我们希望一个代理能够通过使用它以往的一些经验来处理逐渐变得复杂的任务。为了达到这个目的,我们需要让一个模型在不忘记的情况下持续地学习。这个机器学习的领域被称为学会学习 [36]、元学习、终生学习,或者持续学习。持续学习在最近的强化学习 (强化学习以 Google DeepMind 对通用学习代理的探索而著称) 上已经取得了成功 [37,38,39],也正在被用于序列到序列的模型上 [40].

zero-shot 学习
最后,如果我们把迁移学习使用到极限,并且想要仅仅从很少的(一个,甚至 0 个)实例中学习,这就分别得到了 few-shot、one-shot 以及 zero-shot 学习。让模型执行 one-shot and zero-shot 学习,无疑属于机器学习中最艰难的问题。而另一方面,这却是我们人类天生就会的:幼年的时候,为了让我们能够认出任何狗狗,我们仅仅需要被告知一次「这是一条狗」,然而成年人可以仅通过在文中阅读就理解一个东西的本质,不需要事先见过它。
one-shot 学习的新进展利用了这样的思想,即为了在测试的时候实现好的性能,模型需要显式地被训练,从而进行 one-shot 学习 [41,42]。但更加逼真、具有概括性的 zero-shot 学习设置在最近已经引起了注意,在零点学习中训练类别出现在测试的时候 [43].

总结
总之,迁移学习提供了很多令人兴奋的研究方向,特别是许多应用需要能够将知识迁移到新的任务和域中的模型。希望我在这篇博客中为你们给出了关于迁移学习的概述并且激发了你们的兴趣。

Part 2:为了表明迁移学习的发展前景,贴上一段Gigaom对话吴恩达的专访。

Gigaom对话吴恩达:迁移学习是未来五年的重要研究方向:文章选自Gigaom,机器之心编译。



问:谈谈你在百度的日常工作吧。你们的人工智能团队在做什么?
:我们从事基础人工智能技术的开发工作。所有技术,从语音识别到计算机视觉、自然语言处理、数据仓库、用户理解,我们用人工智能技术支持很多百度国际业务并孵化新业务方向。比如,在百度,所有主要业务线都已经转型使用了人工智能。从网页搜索、广告到机器翻译、给用户推荐饭馆等。所以,人工智能在百度很普遍了。除此之外,我们也看到了人工智能所带来的许多新机遇,比如改善基于对话的(基于聊天窗口)的医疗助理,或使用面部识别打造自动开门的十字转门。我们所有团队也在追求那些新的垂直领域里的机遇。

问:在基础研究领域,你有没有什么想做的事情?比如,那些或许有用但我们却搞不清楚其所以然的事情?
:我们在基础研究领域做了很多工作,有趣的是,成功的基础研究一开始会以基础研究的面貌出现,但是,一旦你看到了它的应用价值,过一段时间后就会变得不那么基础了。我们做了很多这样的研究。可以说,在百度,早期的面部识别是以基础研究的面貌起步的,但是,这个服务如今融入产品中了,也服务着产品的百万用户。神经机器翻译最初也是一项基础研究。实际上,这个故事有着不广为人知的另一面:神经机器翻译是在中国开创、研发和使用的。美国公司的研发和使用是在百度之后。中国团队在某个研究领域领先其他国家,这只是例子之一。我们在计算机视觉方面的基础研究,比如,面部识别,也一直处于领先位置。今天,我们正在会学习的机器人和机器学习领域进行广泛的基础研究。我们的研究覆盖了从非常基础的研究到非常应用的研究的所有阶段。

问:百度团队是什么样子?通常你的团队的都是小规模的吗?团队以开发人员为重?你找到了一个成功的分配有限资源的办法了吗?
:这个问题比较复杂。很多项目开始时是小规模的。比如,一年前,自动驾驶团队有 22 个人。但是在团队展现了自己的实力、初步显示出前景并制定一个深思熟虑过的商业计划后,公司就有理由为其团队建设注入庞大资源,如今团队可能有几百个成员。团队从最初的一个基础研究项目变成一个崭新的业务分支。所以很多项目都是从相对小的团队开始的,不过,在其迈入正轨而且价值也清晰了后,我们就能将其嵌入一个拥有很多成员(几十人甚至几百人)的团队中。

问:如今人工智能领域,你认为五年内可以解决的难题之一是什么? 也就是今天很难解决但是五年后就会普遍加以实现的事情?
:从研究角度出发,我认为迁移学习和多任务学习是我想试着解决的问题之一。今天,机器学习全部经济价值都是应用学习,从针对特定任务的标记数据中学习,比如通过大量标记数据人脸数据库学习识别面部。对于很多任务来说,特定垂直领域的数据并不足以支持系统建构。因此,迁移学习会是一个很有活力的领域,机器机器可以学会一个不同的任务。比如,学会大体上识别物体。学会大体上识别物体后,这个知识中有多少会对识别面部的特定目的有用。
从研究角度看,我认为这个非常非常有前途,现在也有广泛使用着的用于这类迁移学习的技术,不过有关如何实现的理论和最佳实践仍然处于相当早期阶段。我们之所以对迁移学习感到兴奋,其原因在于现代深度学习的巨大价值是针对我们拥有海量数据的问题。但是,也有很多问题领域,我们没有足够数据。比如语音识别。在一些语言中,比如普通话,我们有很多数据,但是那些只有少数人说的语言,我们的数据就不够庞大。所以,为了针对数据量不那么多的中国少数人所说的方言进行语音识别,能将从学习普通话中得到的东西进行迁移吗?我们的技术确实可以做到这一点,我们也正在做,但是,这一领域的进步能让人工智能有能力解决广泛得多的问题。

问:人工智能可以告诉我们任何有关人类智能的有用信息吗?或者,反过来,从人工智能那里获取的线索能帮助 AI 更好地工作吗?亦或是这种情形,人工智能和人类智能只是都用了「智能」这个词而已,两者没有任何相似之处?
:从神经科学中获取的知识对当前人工智能的发展只有一丁点用。现实一点说,尽管神经科学研究了几个世纪,今天我们对人类大脑的工作方式几乎还是完全不了解,对大脑工作原理那点极为少量的知识仅能为人工智能提供一些并不可靠的灵感,不过,实际一点说,今天人工智能取得的成绩更多的是受计算机科学原理驱动的,而不是神经科学原理。我已经说过,在自动化人类所能的事情上,人工智能已经变得非常擅长了。比如,人非常善于语音识别,但是人工智能在语音识别上表现不好。人非常善于人脸识别,人工智能正在人脸识别上进展迅速。
事实证明,当我们试着将人类可以做的一件事情自动化而不是解决人类都无法完成的任务时,用于推进该人工智能技术的工具也会更好地发挥作用。原因很多,但是原因之一在于,当我们试着选择一个人类也可以胜任的任务,让人工智能参与进来时,我们就能深入找出人类怎么可以迅速完成这一任务原因。因此,在展望很多人工智能垂直领域时,我们当然可以做一些甚至人类自己都不很擅长的事情。我认为,现在亚马逊向我推荐的书目甚至比我妻子推荐的还要好。我妻子当然非常了解我,但是亚马逊能做到这个程度是因为它积累了大量有关我的浏览和阅读书目数据,这些数据远远多于被妻子看到的阅读书目。我大致认为,有了几个类似这样的例外,当人工智能试着自动化至少人类也能做到的事情时,就会进展神速。

问:您总是在预测人工智能将实现这个问题持保守意见,我认为您这样做的部分原因是因为担心公众狂热的期望会对人工智能研究科学造成灾难性后果,特别是关乎资金方面,我这样说对吗?
:我很倾向实用性,并努力成为一名实用主义者。但是在这一点上我想提出一个略有不同的观点。如果我开始组建一个团队来治疗所有人的疾病,这是非常值得庆祝的事,因为这听起来简直就像是一个伟大的使命。但是坦率地说,在硅谷有时候目标太高就会不受欢迎并一定会有反对的观点出现。我们比较喜欢讨论怎么锚定月亮那样的话题,因为即使我们失败了还能锚定星星。但我认为实际上目标太高会存在一个成本,所以如果你的目标是解决疟疾而不是组建团队解决世界所有的疾病,那么它可能会更有成效,对世界产生更大更好的影响。所以我认为,将人工智能应用于世界会产生更有意义的影响。我认为我们不仅可以通过自动驾驶汽车、人工智能物流改变交通运输,还可以通过人工智能完全地改变医疗。我们可以通过人工智能在世界上做出重大的改进。所以我所做的很多努力都是在为这些具体的、可行的事情做准备。因为我认为这对世界实际上更有成效,我们不会花时间去研究也几百年都不会到来的科幻小说场景。我认为这种为科幻小说花时间的事在硅谷是不受欢迎的。
话虽如此,但作为一个社会,我们需要从事做各种各样的事情。所以我认为有一些人努力解决疟疾,并希望通过盖茨基金会(Gates Foundations)和世界卫生组织(World Health Organization)帮助工作,而另外一些人努力解决人类所有疾病会让社会变得更好。我认为社会以不同的方式分配资源是一件好事。但我也认为这对我们领域的进步也是十分有帮助的。当我们思考「什么是我们有信心可以实现的任务?」对抗「什么是我们应该投资的进一步梦想?」,我们团队有一部分人在做这个,不过那只是我们整体努力的一个小方向。

问:你相信人工通用智能(AGI)的可能性吗?如果是的话,如果是的话,那你认为它是沿着我们已知技术的进化路径实现么,背后的摩尔定律,或者 AGI 是不是需要一个整体的根本性突破,而这个突破甚至是不能预料到的东西?
:我认为实现 AGI 肯定需要多个突破,但这很可能会发生。因为有软件算法的突破和硬件可能的突破。然而,我发现很难预测这一突破是在十年后还是千年后出现。

问:您认为人类的创造力,如编写剧本或小说的能力是否需要另外一个 AGI,或者就是现在我们掌握的技术?
:我认为很多创造力其实是我们不太了解我们创造它的过程。例如,Garry Kasparov 说他看到了深蓝(Deep Blue)创造性的下棋。作为技术专家,我知道国际象棋程序是如何运行的,在任务中通过投入惊人的计算量,深蓝能够下一步妙棋,而这一步妙棋可能在象棋大师眼里就是一种创造性的举措。我自己也研究过创造性过程,创造力是十分困难的工作,因为创造力是增加许多小模块并拼合到一起,然后建立起一个好像是从无到有的巨大事物。但是,如果有人没有看到所有的小模块,或拼合这些小模块成为创造性的物体有多难,那么我认为创造力的实质比它外表上看起来更加神奇。
我的艺术家朋友一遍又一遍地练习单个画笔,并一遍又一遍地画出类似的画,然后他就逐渐取得了进步。我的祖母是一个画家,她在完成一幅惊人的作品前都是一点点进步的,当你只看到最终的成果,而没有看到在完成最终成果之前做所的努力,那么你就会感到神奇。我认为你所做的所有工作都是通过一点点小增量达成的。

问:所以如果你回顾刚才所谈的内容,人类的创造力是可以计算化和可实现的,在合理的时间范围内。人类的创造力不是什么非常神秘的东西,或者说是超出我们能实现的范围的。您同意吗?
:是的。要么通过偶然的绝佳的棋子移动,寻求一个人类还未想到的句子的解释,创造一个简单的艺术作品,我认为我们正在见证机器行为具有某种程度的创造性。我们很可能会继续看到这样循序渐进的进展,机器在今后几年内逐渐变得更有「创造性」。

问:您的团队在地理分布上是怎样的?大部分团队成员在哪里?
:主要在北京。我们在美国有一个 100 人的团队,在北京也有一个大的团队,同时在上海和深圳也有一些小团队。

问:在机器人技术领域,你能看到不同国家和地区的发展重点。例如在日本,能明显看到将更多重心放在制造友好机器人上,去制造与人情感化连接的机器人,而不是与世界上其他部分所连接的机器人。那么在人工智能里面,是不是也有类似的情况?因为刚才您提到脸部识别来自中国。在人工智能领域,不同的公司、不同的地区或者是不同的国家是不是会对有些事情的看法也不同?
:首先我认为在中国,语音识别是经济和商业模式带动发展的一个很好的例子。从产品层面来讲,我认为不同的商业压力和产品优先性会导致不同的国家在不同领域的投资更多或者是更少。在中国就有这样一些例子。
在中国,用手机键盘打中文字要比打英文更加痛苦。所以这反过来也推动了更好的移动端手机语音识别的发展。因此我觉得百度领先在语音识别领域取得的突破也是由于要为用户带来语音识别体验的强大产品压力的驱使。
至于机器翻译,你知道美国有很多关于神经机器翻译的 PR。很多人都不知道的一点是,神经机器翻译其实是在中国首次开创并得到发展的,之后又成为了产品。美国的一些大型公司都在这之后,我认为导致这个现象的其中一个原因是因为在中国,对将一些公开的内容翻译成中文的需求很大,而在美国这样一个说英语国家中,英语的内容非常多。当然中文的内容也很多,但是外国的内容译成中文会特别快,这是一种文化现象。然而世界上的英语内容已经非常多,所以说英语的人寻求对外语内容的翻译没有那么紧需。
人脸识别作为一种商业在中国发展迅猛,因为作为移动优先的社会,中国人习惯了在移动端进行大笔的金融交易。例如,你可以通过百度获得教育贷款,我们会基于你的贷款批给你一大笔钱,而这个申请你在手机上就可以完成。在我们通过手机给某个人发一大笔钱的时候,我们对确认这个人的身份就会产生强烈的兴趣。所以人脸识别就成为了要实现这一目标的关键技术。那些压力也意味着中国的人脸识别是另外一个发展迅猛的领域,其发展势头比其他国家都要快。
不管是在美国还是中国,在人工智能方面都有很多的创新。我猜还有其他的一些领域。英国在人工智能玩视频游戏方面进行了大量的投资。我个人不会在这一方面进行投资,但是我想不同的组织有不同的兴趣和优先性。
我认为如今人工智能的进步成为了一个全球化现象,而且中国有很多的创新正在发生,而英语世界国家还没有意识到这一点。这并不是因为保密的问题,我认为这是因为缺乏语言的流畅性。
例如,几周前我去参加 NIPS 大会,在不到一天的时间之内,所有会议上最重要的演讲都被总结或者是转写为中文 ,并发布在中国的网络上。所以说巴塞罗那一个英语会议转变成中文的知识,中国做的非常快并且非常高效。在不到一天的时间之内,很多中国的研究者就可以阅读我们在西班牙演讲的中文版。我认为正是很多中国人熟练的英语口语和写作能力才让这成为可能。
不幸的是,逆向的知识转换要慢得多。因为从全球范围来看,当前中国之外很多的研究者不说中文。所以当人们发明了很多东西,甚至已经在中国广泛传播,一些英语观众都浑然不知,有时候甚至是在一年之后,一个英语国家的公司发明了类似的东西之后这些技术才能传播开来。所以我希望自己能做的其中一件事情就是帮助提高相反方向知识转换的速度,因为如果我们能够让研究社区更加的全球化,那么全球的研究社区就会进步的越快。
我想有一些具体的例子。首先是在中国,普通话短句的语音识别在一年前超越了人类水平,但是这一成果在全球范围的知名度并不广,直到最近才被很多人熟知。我可以看到很多的例子,从语音识别领域取得的进步到神经机器翻译领域所取得的进步,再到中国率先建立了深度学习 GPU 处理器,但是我希望能够在中国初次发明之后,在美国也能够尽快看到这些成就。

问:您有没有一些网站或者是期刊可以推荐给我们的读者,以便让他们能够更加容易地查找信息?
:在中国,传播知识的方式和美国不太相同。在中国,人工智能在社交媒体上传播特别快,而是传播的方式特别强大,如果不是亲身经历的话可能无法理解。另外,相关的网站非常多,但是很多都是中文网站。你们可以在 Twitter/微博上关注我,我会看看该怎么帮助大家。

问:在你看来人类意识是什么?或者更确切地说,你相信人类意识从根本上来说是可计算的吗?
:我不知道意识到底是什么。在哲学领域,对周围的人是否真正具有意识,或者说他们像是僵尸一样,以及机器人通过计算表现得好像它们具有意识一样等这些问题一直存在着争论。总而言之,我们如何知道除了我们之外的其他人都真正具有意识?还是说他们是机器人?
我并不认为意识是计算机从根本上来说无法实现的,确切地说,是我们应该如何去实现,而实现这一点是需要几十年还是几百年,我们还不清楚。

以上。

文章均来源于微信公众号:机器之心(almosthuman2014),如需转载,请私信联系。

There are more resources in this post

What do you need Sign in Can I download or view it without an account?Join now Scan and login on wechat

x
Translated by the Internet, your translation resource information platform, pay attention to the official account [translation information]-Official account:fanyi899
华重公主卤 | 2021-10-7 11:48:51 | 显示全部楼层
What is being learned in transfer learning
https://arxiv.org/pdf/2008.11687.pdf最近谷歌这篇文章推荐读一下
对于机器来说,一种理想的能力是能够将它们对一个领域的知识转移到另一个(通常)数据稀少的领域。尽管迁移学习在各种深度学习应用中有着广泛的适应性,但我们还不清楚是什么促成了成功的迁移,以及网络的哪一部分对此负责。在本文中,我们提供了新的工具和分析来解决这些基本问题。
通过对块混洗图像的一系列迁移分析,我们将特征重用的效果与学习低层数据统计的效果分离开来,并说明后者对传输学习有一定的好处。研究表明,当使用预先训练的权重进行训练时,该模型在损失景观中保持在同一流形内,且该模型的不同实例在特征空间上相似,在参数空间上接近。
4个观点直接了当:
    feature-reuse and low-level statistic对迁移重要
2. 模型足够鲁棒,则迁移是好的,不然会带来错误,因为迁移的模型会倾向于识别类似的特征。由预先训练的权值训练的模型在目标域上会犯相似的错误,具有相似的特征,并且在参数空间中L2距离非常接近。它们位于损失景观的同一流域,而随机初始化得到的模型不在同一流形内,会犯不同的错误,具有不同的特征,并且在参数空间中L2相距较远。
3. 迁移低层语义特征,高层语义特征对参数的扰动更敏感。
4.可以从预先训练的模型的早期检查点开始,而不会丢失微调模型的精度。这种现象的起点取决于预训练何时进入其最终局部最优值。


useImageNet预训练模型,在DomainNetandCHEXPERT上实验。
定义:


1)对于优化上盆地中的大多数点,其损失应接近盆地中损失的预期值。
2)加入高斯噪声,其自然训练也应该收敛。
3)一旦空间迁移以后,离开了局部最优值,就会有损失增加。




作者扩展了模块临界性的定义,通过观察模块的初始值和最终值之间线性连接的直接路径和优化器从初始化到最终解决方案(训练过程中的检查点)的优化路径。顺带还研究了一个权重矩阵的最终值,以及它在训练期间的最优值,作为研究临界性的路径起点。(这个公式没看懂他说什么)
结论:最小信息瓶颈、增加随机性好像有用。

There are more resources in this post

What do you need Sign in Can I download or view it without an account?Join now Scan and login on wechat

x
Translated by the Internet, your translation resource information platform, pay attention to the official account [translation information]-Official account:fanyi899
一耍娃娃y | 2021-10-7 11:49:26 | 显示全部楼层
迁移学习是把从source domain(s) 中学到的“知识”,有效的用到解决target domain的问题上。这里"知识”存在的形式可以有很多种。

比如当target domain明显存在数据少的情况下,我们可以通过有效的mapping来把source domain的数据mapreachtarget这边,从而在target domain 这边 train出更好的model. 所以这种情况下“知识”的存在形式是labelled data.

再比方说,当我们想缩小target domain model的训练时间时,可以把source domain model的参数想办法用过来.很多强化学习的初期transfer learning model就是直接用的model参数,加上feature mapping.

最近同一domain内的transfer也很火,参见hinton14年提出的黑科技蒸馏法...

个人觉得应用前景还是很乐观的, 现在在NLPandtext-image domain都已经很火了。。。
Translated by the Internet, your translation resource information platform, pay attention to the official account [translation information]-Official account:fanyi899
bmxphg274 | 2021-10-7 11:50:23 | 显示全部楼层
是时候该系统回答下这个问题了!
“迁移学习”是个好东西,可以使我们在他人训练过的模型基础上进行小改动便可投入使用。还没那么了解它?不怕,看看下面这个介绍好了。
接下来,我们将回答关于迁移学习的这些问题:
1. 什么是迁移学习?
2. 什么是预训练模型?
3. 为什么我们使用预训练模型?-结合生活实例
4. 我们可以怎样运用预训练模型?
提取特征(extract features)
优化模型(fine tune the model)
5. 优化模型的方式
6. 在数字识别中使用预训练模型
只针对输出密集层(output dense layer)的重新训练
冻结初始几层网络的权重因子
7. 迁移学习的前景如何?
1. 什么是迁移学习?

为了对迁移学习产生一个直观的认识,不妨拿老师与学生之间的关系做类比。
一位老师通常在ta所教授的领域有着多年丰富的经验,在这些积累的基础上,老师们能够在课堂上教授给学生们该领域最简明扼要的内容。这个过程可以看做是老手与新手之间的“信息迁移”。


这个过程在神经网络中也适用。
我们知道,神经网络需要用数据来训练,它从数据中获得信息,进而把它们转换成相应的权重。这些权重能够被提取出来,迁移到其他的神经网络中,我们“迁移”了这些学来的特征,就不需要从零开始训练一个神经网络了 .
现在,让我们从自身进化的角度来讨论这种迁移学习的重要性。这是Tim Urban最近在http://waitbutwhy.com上的一篇文章中提出的观点。
Tim说,在语言发明之前,每一代人类都需要自身重新习得很多知识,这也是知识从上一代到下一代一增长缓慢的原因


随后,我们发明了语言,这为知识在世代间的传递提供了载体,下图是在语言发明后,同样时间尺度下知识增长速度的示意图。


是不是看起来很牛逼?而通过权重的传递来进行迁移学习和人类在世代交替中通过语言传播知识,是一个道理。
2. 什么是预训练模型?

简单来说,预训练模型(pre-trained model)是前人为了解决类似问题所创造出来的模型。你在解决问题的时候,不用从零开始训练一个新模型,可以从在类似问题中训练过的模型入手。
比如说,如果你想做一辆自动驾驶汽车,可以花数年时间从零开始构建一个性能优良的图像识别算法,也可以从GooglestayImageNet数据集上训练得到的inception model(一个预训练模型)起步,来识别图像。
一个预训练模型可能对于你的应用中并不是100%的准确对口,但是它可以为你节省大量功夫。
接下来,我会举个例子来说明。
3. 为什么我们要用预训练模型?

上周我一直在尝试解决Crowdanalytix platform上的一个问题:从手机图片中分辨场景。
这是一个图像分类的问题,训练数据集中有4591张图片,测试集中有1200张图片。我们的任务是将图片相应地分到16个类别中。在对图片进行一些预处理后,我首先采用一个简单的MLP(Multi-later Perceptron)模型,结构如下图所示:


在对输入图片(224*224*3)平整化后,为了简化上述结构,我用了三个各含有500个神经元的隐藏层。在输出层中,共有16个神经元对应着十六个类别。
我只能将训练的准确率控制在6.8%,这是个很不理想的结果。我尝试对隐藏层、隐层中神经元的数量以及drop out速率进行调整,但准确度都没有太大的提升。而如果增加隐藏层和其中神经元的数量,每个周期的运行时间则会增加20s以上。(我的开发环境是12GB VRAM,Titan X GPU)
下面是我用上文所述结构的MLP模型训练输出的结果。


可以看出,除非指数级地增加训练时长,MLP模型无法提供给我更好的结果。因此,我转而采用CNN(卷积神经网络),看看他们在这个数据集上的表现,以及是否能够提高训练的准确度。
CNN的结构如下:


我使用了3个卷积的模块,每个模块由以下部分组成:
    32individual5*5Offilter线性整流函数(ReLU)作为激活函数4*4的最大值池化层
最后一个卷积模块输出的结果经过平整化后会被传递到一个拥有64的神经元的隐藏层上,随后通过一个drop out rate = 0.5处理后传递到输出层。
最终训练的结果记录如下:


准确率15.75%,尽管与MLP模型相比有所提升,但每个周期的运行时间也增加了。
而更重要的是,数据集中最大类别所含图片数量约占总数17.6%左右。
只要把所有的图片都归到最大的类别,我们就能够得到比MLP、CNN训练出来的模型更好的结果(ノへ ̄、).
此外,增加更多的卷积模块也会大大增加训练时长。
于是,我转而去采用预训练模型,这样我不需要重新训练我的整个结构,只需要针对其中的几层进行训练即可。
因此,我采用了在ImageNet数据集上预先训练好的VGG16模型,这个模型可以在Keras库中找到。
模型的结构如下所示:


stayVGG16结构的基础上,我只将softmax层的1000个输出改为16个,从而适应我们这个问题的情景,随后重新训练了dense layer.
跟MLPandCNN相比,这个结构的准确率能够达到70%。同时,使用VGG16最大的好处是大大减少了训练时间,只需要针对dense layer进行训练,所需时间基本可以忽略。
4.怎样使用预训练模型?

当在训练经网络的时候我们的目标是什么?我们希望网络能够在多次正向反向迭代的过程中,找到合适的权重。
通过使用之前在大数据集上经过训练的预训练模型,我们可以直接使用相应的结构和权重,将它们应用到我们正在面对的问题上。这被称作是“迁移学习”,即将预训练的模型“迁移”到我们正在应对的特定问题中。
在选择预训练模型的时候你需要非常仔细,如果你的问题与预训练模型训练情景下有很大的出入,那么模型所得到的预测结果将会非常不准确。
举例来说,如果把一个原本用于语音识别的模型用来做用户识别,那结果肯定是不理想的。
幸运的是,Keras库中有许多这类预训练的结构。
ImageNet数据集已经被广泛用作训练集,因为它规模足够大(包括120万张图片),有助于训练普适模型。ImageNet的训练目标,是将所有的图片正确地划分到1000个分类条目下。这1000个分类基本上都来源于我们的日常生活,比如说猫猫狗狗的种类,各种家庭用品,日常通勤工具等等。
在迁移学习中,这些预训练的网络对于ImageNet数据集外的图片也表现出了很好的泛化性能。
既然预训练模型已经训练得很好,我们就不会在短时间内去修改过多的权重,在迁移学习中用到它的时候,往往只是进行微调(fine tune).
在修改模型的过程中,我们通过会采用比一般训练模型更低的学习速率。
5. 微调模型的方法

特征提取
我们可以将预训练模型当做特征提取装置来使用。具体的做法是,将输出层去掉,然后将剩下的整个网络当做一个固定的特征提取机,从而应用到新的数据集中。
采用预训练模型的结构
我们还可以采用预训练模型的结构,但先将所有的权重随机化,然后依据自己的数据集进行训练。
训练特定层,冻结其他层
另一种使用预训练模型的方法是对它进行部分的训练。具体的做法是,将模型起始的一些层的权重保持不变,重新训练后面的层,得到新的权重。在这个过程中,我们可以多次进行尝试,从而能够依据结果找到frozen layersandretrain layers之间的最佳搭配。
如何使用与训练模型,是由数据集大小和新旧数据集(预训练的数据集和我们要解决的数据集)之间数据的相似度来决定的。
下图表展示了在各种情况下应该如何使用预训练模型:



场景一:数据集小,数据相似度高(Andpre-trained model的训练数据相比而言)
在这种情况下,因为数据与预训练模型的训练数据相似度很高,因此我们不需要重新训练模型。我们只需要将输出层改制成符合问题情境下的结构就好。
我们使用预处理模型作为模式提取器。
比如说我们使用在ImageNet上训练的模型来辨认一组新照片中的小猫小狗。在这里,需要被辨认的图片与ImageNet库中的图片类似,但是我们的输出结果中只需要两项——猫或者狗。
在这个例子中,我们需要做的就是把dense layer和最终softmax layer的输出从1000个类别改为2个类别。
场景二:数据集小,数据相似度不高
在这种情况下,我们可以冻结预训练模型中的前k个层中的权重,然后重新训练后面的n-k个层,当然最后一层也需要根据相应的输出格式来进行修改。
因为数据的相似度不高,重新训练的过程就变得非常关键。而新数据集大小的不足,则是通过冻结预训练模型的前k层进行弥补。
场景三:数据集大,数据相似度不高
在这种情况下,因为我们有一个很大的数据集,所以神经网络的训练过程将会比较有效率。然而,因为实际数据与预训练模型的训练数据之间存在很大差异,采用预训练模型将不会是一种高效的方式。
因此最好的方法还是将预处理模型中的权重全都初始化后在新数据集的基础上重头开始训练。
场景四:数据集大,数据相似度高
这就是最理想的情况,采用预训练模型会变得非常高效。最好的运用方式是保持模型原有的结构和初始权重不变,随后在新数据集的基础上重新训练。
6. 在手写数字识别中使用预训练模型

现在,让我们尝试来用预训练模型去解决一个简单的问题。
我曾经使用vgg16作为预训练的模型结构,并把它应用到手写数字识别上。
让我们先来看看这个问题对应着之前四种场景中的哪一种。我们的训练集(MNIST)有大约60,000张左右的手写数字图片,这样的数据集显然是偏小的。所以这个问题应该属于场景一或场景二。
我们可以尝试把两种对应的方法都用一下,看看最终的效果。
只重新训练输出层 & dense layer
这里我们采用vgg16作为特征提取器。随后这些特征,会被传递到依据我们数据集训练的dense layer上。输出层同样由与我们问题相对应的softmax层函数所取代。
stayvgg16中,输出层是一个拥有1000个类别的softmax层。我们把这层去掉,换上一层只有10个类别的softmax层。我们只训练这些层,然后就进行数字识别的尝试。
# importing required librariesfrom keras.models import Sequentialfrom scipy.misc import imread
get_ipython().magic('matplotlib inline')import matplotlib.pyplot as pltimport numpy as npimport kerasfrom keras.layers import Denseimport pandas as pdfrom keras.applications.vgg16 import VGG16from keras.preprocessing import imagefrom keras.applications.vgg16 import preprocess_inputimport numpy as npfrom keras.applications.vgg16 import decode_predictions
train=pd.read_csv("R/Data/Train/train.csv")
test=pd.read_csv("R/Data/test.csv")
train_path="R/Data/Train/Images/train/"test_path="R/Data/Train/Images/test/"from scipy.misc import imresize# preparing the train datasettrain_img=[]for i in range(len(train)):

    temp_img=image.load_img(train_path+train['filename'],target_size=(224,224))

    temp_img=image.img_to_array(temp_img)

    train_img.append(temp_img)#converting train images to array and applying mean subtraction processingtrain_img=np.array(train_img)
train_img=preprocess_input(train_img)# applying the same procedure with the test datasettest_img=[]for i in range(len(test)):

    temp_img=image.load_img(test_path+test['filename'],target_size=(224,224))

    temp_img=image.img_to_array(temp_img)

    test_img.append(temp_img)

test_img=np.array(test_img)
test_img=preprocess_input(test_img)# loading VGG16 model weightsmodel = VGG16(weights='imagenet', include_top=False)# Extracting features from the train dataset using the VGG16 pre-trained modelfeatures_train=model.predict(train_img)# Extracting features from the train dataset using the VGG16 pre-trained modelfeatures_test=model.predict(test_img)# flattening the layers to conform to MLP inputtrain_x=features_train.reshape(49000,25088)# converting target variable to arraytrain_y=np.asarray(train['label'])# performing one-hot encoding for the target variabletrain_y=pd.get_dummies(train_y)
train_y=np.array(train_y)# creating training and validation setfrom sklearn.model_selection import train_test_split
X_train, X_valid, Y_train, Y_valid=train_test_split(train_x,train_y,test_size=0.3, random_state=42)# creating a mlp modelfrom keras.layers import Dense, Activation
model=Sequential()

model.add(Dense(1000, input_dim=25088, activation='relu',kernel_initializer='uniform'))
keras.layers.core.Dropout(0.3, noise_shape=None, seed=None)

model.add(Dense(500,input_dim=1000,activation='sigmoid'))
keras.layers.core.Dropout(0.4, noise_shape=None, seed=None)

model.add(Dense(150,input_dim=500,activation='sigmoid'))
keras.layers.core.Dropout(0.2, noise_shape=None, seed=None)

model.add(Dense(units=10))
model.add(Activation('softmax'))

model.compile(loss='categorical_crossentropy', optimizer="adam", metrics=['accuracy'])# fitting the model model.fit(X_train, Y_train, epochs=20, batch_size=128,validation_data=(X_valid,Y_valid))冻结最初几层网络的权重
这里我们将会把vgg16网络的前8层进行冻结,然后对后面的网络重新进行训练。这么做是因为最初的几层网络捕获的是曲线、边缘这种普遍的特征,这跟我们的问题是相关的。我们想要保证这些权重不变,让网络在学习过程中重点关注这个数据集特有的一些特征,从而对后面的网络进行调整。
from keras.models import Sequentialfrom scipy.misc import imread
get_ipython().magic('matplotlib inline')import matplotlib.pyplot as pltimport numpy as npimport kerasfrom keras.layers import Denseimport pandas as pdfrom keras.applications.vgg16 import VGG16from keras.preprocessing import imagefrom keras.applications.vgg16 import preprocess_inputimport numpy as npfrom keras.applications.vgg16 import decode_predictionsfrom keras.utils.np_utils import to_categoricalfrom sklearn.preprocessing import LabelEncoderfrom keras.models import Sequentialfrom keras.optimizers import SGDfrom keras.layers import Input, Dense, Convolution2D, MaxPooling2D, AveragePooling2D, ZeroPadding2D, Dropout, Flatten, merge, Reshape, Activationfrom sklearn.metrics import log_loss

train=pd.read_csv("R/Data/Train/train.csv")
test=pd.read_csv("R/Data/test.csv")
train_path="R/Data/Train/Images/train/"test_path="R/Data/Train/Images/test/"from scipy.misc import imresize

train_img=[]for i in range(len(train)):

    temp_img=image.load_img(train_path+train['filename'],target_size=(224,224))

    temp_img=image.img_to_array(temp_img)

    train_img.append(temp_img)

train_img=np.array(train_img)
train_img=preprocess_input(train_img)

test_img=[]for i in range(len(test)):

temp_img=image.load_img(test_path+test['filename'],target_size=(224,224))

    temp_img=image.img_to_array(temp_img)

    test_img.append(temp_img)

test_img=np.array(test_img)
test_img=preprocess_input(test_img)from keras.models import Modeldef vgg16_model(img_rows, img_cols, channel=1, num_classes=None):

    model = VGG16(weights='imagenet', include_top=True)

    model.layers.pop()

    model.outputs = [model.layers[-1].output]

    model.layers[-1].outbound_nodes = []

          x=Dense(num_classes, activation='softmax')(model.output)

    model=Model(model.input,x)#To set the first 8 layers to non-trainable (weights will not be updated)

          for layer in model.layers[:8]:

       layer.trainable = False# Learning rate is changed to 0.001
    sgd = SGD(lr=1e-3, decay=1e-6, momentum=0.9, nesterov=True)
    model.compile(optimizer=sgd, loss='categorical_crossentropy', metrics=['accuracy'])    return model

train_y=np.asarray(train['label'])

le = LabelEncoder()

train_y = le.fit_transform(train_y)

train_y=to_categorical(train_y)

train_y=np.array(train_y)from sklearn.model_selection import train_test_split
X_train, X_valid, Y_train, Y_valid=train_test_split(train_img,train_y,test_size=0.2, random_state=42)# Example to fine-tune on 3000 samples from Cifar10img_rows, img_cols = 224, 224 # Resolution of inputschannel = 3num_classes = 10 batch_size = 16 nb_epoch = 10# Load our modelmodel = vgg16_model(img_rows, img_cols, channel, num_classes)

model.summary()# Start Fine-tuningmodel.fit(X_train, Y_train,batch_size=batch_size,epochs=nb_epoch,shuffle=True,verbose=1,validation_data=(X_valid, Y_valid))# Make predictionspredictions_valid = model.predict(X_valid, batch_size=batch_size, verbose=1)# Cross-entropy loss scorescore = log_loss(Y_valid, predictions_valid)7. 迁移学习的前景如何?

这个问题,吴恩达老师已经表过态了~
此前,吴恩达在接受技术研究和分析公司Gigaom的采访时,表示迁移学习是AI领域未来5年的重要研究方向。
吴恩达认为,迁移学习可以让机器举一反三,从一个任务出发学会不同的任务。比如机器在学会物体识别后,此技能对人脸识别可能也同样奏效。
所以吴恩达觉得,迁移学习非常有前景,自己也对迁移学习的应用感到兴奋。

量子位 · QbitAI
վ'ᴗ' ի 追踪AI技术和产品新动态
量子位欢迎大家关注我们,以及订阅我们的知乎专栏

There are more resources in this post

What do you need Sign in Can I download or view it without an account?Join now Scan and login on wechat

x
Translated by the Internet, your translation resource information platform, pay attention to the official account [translation information]-Official account:fanyi899
耕读世家 | 2021-10-7 11:51:23 | 显示全部楼层
尽量通俗易懂地回答一下这个问题:
1.迁移学习

顾名思义,便是把深度学习在某些数据集已经学习到的经验(参数)直接应用到新的数据集上.
如下图,1图中模型在Imagenet数据集上面做了训练,已经得到了模型的参数。
当有一个新的较小的数据集2图时,我们可以“冻结”大多数layer的参数,只需重新训练最后几层全连接层(FC layer)的参数。




2. 直观解释

为什么上面方法可以行得通呢?
大家知道深度学习每一各神经元都刻画了某种特征(feature)
初级(前几层)的神经元刻画较为简单的特征,如:折线、边角
越往高级(层数越高)特征越为复杂:手、脚、车轮子
最后一层神经元把高级特征综合起来,判断整张图属于哪个类别

迁移学习的假设,便是不同数据集之间,初级特征都是相同的:折线、边角
因此我们不需要再重新训练这些参数,而是直接拿来用

如果俩个数据集类别相似(例如都是动物数据集)
那么可以重复利用的特征更多
便可以利用更为复杂的特征(猫头、狗头、马尾巴等)


3. classification

迁移学习根据新旧数据集的不同类型,大致可以分为以下四类
(1)新数据集较小,类型和老数据集一样:这时比较好办,只需重新训练最后的FC layer
(2)较小,但类型不一样:多训练一些layer
(3)新数据集比之前的大,类型一样:多训练一些layer
(4)新数据集比之前的大,类型不一样:多训练很多layer



4. 为何迁移学习

一来节省了非常多的训练时间--因为重复使用了绝大多数的参数
二来解决了数据集过小带来的过拟合风险--往往迁移超大数据集的参数(如Imagenet)

5.应用前景

最后,迁移学习已经无处不在了,个人觉得他不能称为一个领域,而是深度学习里的一个技巧。
如今深度学习的paper里大家可以看到这样的白箱子,它指的便是该框架重复利用了一些已有库的已经训练好的参数。
见下图:



以上图片截图自:斯坦福大学李飞飞教授的CS231n视频课程
CS231n: Convolutional Neural Networks for Visual Recognition
<hr/>更多人工智能、优化理论干货,尽在以下专栏及同名公众号:
『运筹OR帷幄』大数据人工智能时代的运筹学

There are more resources in this post

What do you need Sign in Can I download or view it without an account?Join now Scan and login on wechat

x
Translated by the Internet, your translation resource information platform, pay attention to the official account [translation information]-Official account:fanyi899
You need to log in before you can reply Sign in | Join now Scan and login on wechat

Integral rules of this edition

12

theme

19

Post

55

integral

Registered members

Rank: 2

integral
55