Learning Transferable Architectures for Scalable Image Recognition论文简述

本文介绍了对Neural Architecture Search with Reinforcement Learning的优化,采用Proximal Policy Optimization (PPO)更新控制器参数,并针对运算符进行搜索。网络结构基于ResNet和GoogleNet的堆叠思想,使用卷积单元(Convolution Cell)并分为Normal Cell和Reduction Cell。每个Cell由多个block组成,每个block包含多个操作选择步骤,最终通过实验验证了在较少参数下保持高准确性的特点。

        本文是谷歌在2018年提出的一篇神经网络结构最优搜索的论文

        本文的核心思想是基于一篇Neural Architecture Search With Reinforcement Learning,的优化和改进。

我们知道在深度学习任务比如图像识别,图像分类中模型结构是非常关键的,比如VGG,ResNet,DenseNet等在网络结构的设计。但是,这种人为设计的结构就一定好么?不一定,因此希望能通过一个神经网络来按照一定策略学习得到最佳的网络结构。

首先,先简单说一说Neural Architecture Search With Reinforcement Learning这篇论文。

这篇文论的话,现在看来比较粗暴,用强化学习(reinforcement learning)来学习一个最优的网络结构,简单来说就是通过一个controller在搜索空间(search space)中得到一个网络结构(child network),然后用这个网络结构在数据集上训练得到准确率,再将这个准确率回传给controller,controller继续优化得到另一个网络结构,如此反复进行直到得到最佳的结果。

        很明显核心就是如何通过这个controller得到我们的网络结构,以及如何训练我们的controller。首先,如何得到我们的子网络结构,controller采用的就是RNN结构。那么为什么是RNN结构呢?因为作者观察到,神经网络的结构和连通性通常可以用一串长度可变的字符串来表示,因此可以用一个循环神经网络来生成这样的字符串。也就是如图这样

        

 

        那么如何训练呢?这里就用到了强化学习的方法。我每次选出一个子网络,得到子网络精度,这个精度就是我们的reward,而搜索空间就是我们的action空间,controller就是我们的agent,如此便可以训练我们模型了。

        接下来进入正题。

        那么本篇论文,就是基于这样的一个方法的改进。

        首先,在更新controller参数的时候采用 Proximal Policy Optimization (PPO),而不是原先的policy geadient method;同时借鉴了目前优秀网络结构(ResNet,GoogleNet)的重复堆叠思想,与上篇论文不同,这里是针对于算子(op)进行搜索的,之后会详细讲到。

        因此本文的结构为:

        通过借鉴ResNet和GooleNet中网络结构堆叠的思想,这篇论文采用的的最小堆叠单位就是convolution cell,而convlolution cell主要包含两种:第一种是不改变输入feature map的大小的卷积,也就是下图中的Normal Cell;第二种是将输入feature map的长宽各减少为原来的一半的卷积,也就是下图中的Reduction Cell。整体的网络结构就是Normal Cell与Reduction Cell相互穿插,因此当网络结构定义如图,那么本文的controller就用来预测下图中的Normal Cell和Reduction Cell。

        每一个Cell由N个block组成,每个block由5个prediction steps组成。这5个steps分别是:

Step 1. Select a hidden state from hi, hi−1 or from the set of hidden states created in previous blocks.

Step 2. Select a second hidden state from the same options as in Step 1.

Step 3. Select an operation to apply to the hidden state selected in Step 1.

Step 4. Select an operation to apply to the hidden state selected in Step 2.

Step 5. Select a method to combine the outputs of Step 3 and 4 to create a new hidden state.

        首先的两步就是选择隐藏状态,可以看下图就理解了

       而对于step3和step4来说,可选择的op有以下几种

        对于最后一步的话就只有add和concat

        作者在文中举例说明了一种搜出来的结构如图

        最后,通过实验验证NASNet的特点在于在参数数量较少的情况还还能保持较高的准确率。

        如有错误,欢迎各位批评指正!

近年来,随着机器人感知和交互技术的发展,触觉表示学习成为提升机器人在复杂环境中适应能力的重要研究方向。传统的触觉数据处理方法通常依赖于特定任务或传感器的设计,缺乏泛化能力和可迁移性。为了解决这一问题,研究人员开始探索基于深度学习的跨任务、跨传感器的可迁移触觉表示学习方法。 其中,**Transferable Tactile Transformers (T3)** 是一种新兴的方法,它借鉴了自然语言处理中Transformer架构的优势,通过自注意力机制建模触觉数据中的时空关系,从而提取具有语义意义的高层表示。这种方法不仅能够处理来自不同传感器的数据(如压力、温度、滑动等),还能在不同任务之间共享这些表示,例如从物体识别迁移到抓取控制或材质分类。 ### 模型结构与原理 T3模型的核心组件包括: - **嵌入层**:将原始触觉信号(可能是时间序列)映射到高维空间中的向量表示。 - **多头自注意力机制**:捕捉触觉输入内部以及不同传感器之间的长程依赖关系。 - **位置编码**:为了保留时间信息,引入位置编码以区分不同时刻的触觉事件。 - **前馈网络**:用于非线性变换和特征增强。 - **任务适配器模块**:允许模型根据目标任务微调表示,而不需要重新训练整个模型。 该架构的一个关键优势在于其模块化设计,使得预训练的表示可以被灵活地应用于各种下游任务[^1]。 ### 数据集与训练策略 T3通常在大规模多模态触觉数据集上进行预训练,例如包含多种物体接触场景的触觉序列数据。训练过程中采用对比学习(Contrastive Learning)或掩码重建(Masked Modeling)等自监督学习策略,以减少对标注数据的依赖。通过这种方式,模型能够学习到更具鲁棒性和通用性的触觉特征表示。 ### 应用场景 - **机器人抓取**:利用学到的触觉表示判断物体是否滑动或是否被抓稳。 - **材质识别**:从触觉反馈中识别物体表面的物理属性。 - **人机交互**:理解用户通过触觉设备传达的意图。 - **异常检测**:监测机器人操作过程中的异常接触状态。 ### 实现示例(简化版) 以下是一个简化的Transformer-based触觉表示学习模型实现示例,使用PyTorch框架: ```python import torch import torch.nn as nn class TactileTransformer(nn.Module): def __init__(self, input_dim=64, model_dim=128, num_heads=8, num_layers=3, output_dim=32): super(TactileTransformer, self).__init__() self.embedding = nn.Linear(input_dim, model_dim) self.positional_encoding = nn.Parameter(torch.randn(1, 100, model_dim)) # 假设最大序列长度为100 encoder_layer = nn.TransformerEncoderLayer(d_model=model_dim, nhead=num_heads) self.transformer_encoder = nn.TransformerEncoder(encoder_layer, num_layers=num_layers) self.fc_out = nn.Linear(model_dim, output_dim) def forward(self, x): # x shape: (batch_size, seq_len, input_dim) x = self.embedding(x) # (batch_size, seq_len, model_dim) x = x + self.positional_encoding[:, :x.size(1)] x = x.transpose(0, 1) # Transformer expects (seq_len, batch_size, model_dim) x = self.transformer_encoder(x) x = x.transpose(0, 1) # Back to (batch_size, seq_len, model_dim) x = self.fc_out(x) # Output representations return x ``` 上述代码定义了一个基本的Transformer编码器结构,可用于从触觉时间序列中提取高层次表示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值