神经网络结构搜索(Neural Architecture search)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了神经网络结构搜索(Neural Architecture search)相关的知识,希望对你有一定的参考价值。
参考技术A 神经网络搜索是生成和优化网络结构的有效工具 Neural Architecture Search 。在不确定网络的长度和结构的情况下,使用一个循环神经网络(recurrent network)作为控制器来生成网络结构的字段,用来构建子神经网络。将训练子网络之后的准确率作为控制器回馈信号(reward signal),通过计算策略梯度(policy gradient)更新控制器,这样不断的迭代循环。在下一次迭代中,控制器将有更高的概率提出一个高准确率的网络结构。总之,伴随着时间的推移,控制器将通过不断的学习来提高搜索结果。如下图所示就是网络结构搜索。
神经结构搜索中,我们使用控制器产生神经网络的超参数。控制器使用的是一个循环神经网络。假设我们希望预测只有卷积层的前馈神经网络,就可以使用控制器来生成这些超参数的序列。
控制器可以看到代理(agent),生成的超参数序列(网络结构的描述字符串)可以被看做代理一系列的动作(actions) 。子网络在收敛后将达到准确率 。随后,将 作为回馈信号并使用增强学习训练控制器。具体的说,为了优化的结构,需要让控制器最大化期望回馈,期望回馈可以表示为 :
由于 不可微分,因此不能使用传统的BP算法。我们需要使用回馈更新代理的策略参数 ,进而实现回馈的最优化。这里我们使用 Williams 提出的REINFORCE,这个公式关联了回馈 和策略参数 :
上述数值的可以近似表示为:
是控制器一个批样本网络模型的数量, 是控制器生成的网络结构的超参数数量。 是第 个神经网络模型的准确率。
上述更新的梯度是梯度的无偏估计,但是方差很大。为了减小方差,我们使用了一个基线函数: 。
只要 不依赖与当前的动作,这个梯度导数将始终是无偏估计。这里,我们的 是准确率的指数移动平均值 EMA 。
在神经网络搜索中,训练一个子网络可能需要几个小时的时间。使用分布式训练和并行参数更新可以加速控制器的学习过程。我们使用参数服务器保存所有参数,服务器将参数分发给控制器,控制器被分成 个,每一个控制器使用得到的参数进行模型的构建,由于得到的参数可能不同,构建模型的策略也是随机的,导致每次构建的网络结构也会不同。每个控制器会构建一个batch, 个子网络,然后并行训练子网络得到准确率。计算出参数的梯度。然后计算完梯度的控制器将梯度传递到参数服务器,分别对自己负责的参数进行更新。接下来控制器得到更新的参数开始构建新的神经网络模型。这里,每一个控制器独立的发送自己的梯度更新服务器参数,不需要控制器之间同步,这及时异步更新。这里子网络的训练次数固定(epochs)。这种并行架构如下图所示
为了让控制器产生跳跃连接。在第 层中,添加一个锚点(anchor point)表示是否和前面的网络层连接:
表示控制器第 层网络锚点的隐藏状态, 介于0到 之间。根据这些sigmoids的结果来决定哪些网络层被用作当前层的输入。 , 和 是可训练参数。[图片上传失败...(image-feb8fe-1558488967580)]
为了产生循环元胞。控制器需要找到一个公式,以 和 作为输入, 作为结果。最简单的方式 ,这是一个基本的循环细胞的公式。一个更复杂的公式是广泛应用的LSTM循环元胞。
基础RNN和LSTM都可以描述为一个树形结构,输入 和 ,产生 ,这些变量作为叶子。控制器RNN需要标明树上的每个节点的结合方法(相加,按元素相乘等)和激活函数,用于融合两个输入并产生一个输出。然后两个节点输出又被作为树上下一个节点的输入。为了控制器可以选择这些方法和函数,我们将树上的节点以一定的顺序编号,这样控制器可以顺序的预测。
初识:神经网络(Neural Networks)
浅谈Neural Networks
神经网络介绍
人工神经网络(Artificial Neural Networks)也简称为神经网络(NN)。是模拟人类大脑神经网络的结构和行为。
20 世纪 80 年代以来,人工神经网络(Artificial Neural Network)研究所取得的突破性进展。神经网络辨识是采用神经网络进行逼近或建模,神经网络辨识为解决复杂的非线性、 不确定、未知系统的控制问题开辟了新途径。
神经网络主要应用领域有:模式识别与图象处理(语音、指纹、故障检测和图象压缩等)、 控制与优化、系统辨识、预测与管理(市场预测、风险分析)、通信等。
神经网络原理
经典的神经网络有以下三个层次组成:输入层(input layer), 隐藏层 (hidden layers), 输出层 (output layers)。
每个圆圈就是一个神经元。每层与每层之间是没有连接的,但是层与层之间都有连接。 每个连接都是带有权重值的。隐藏层和输出层的神经元由输入的数据计算输出,但输入层神 经元只有输入,一般指一个训练数据样本的数据。
神经系统的基本构造是神经元(神经细胞),它是处理人体内各部分之间相互信息传递的 基本单元。每个神经元都由一个细胞体,一个连接其他神经元的轴突和一些向外伸出的其它较短分支—树突组成。
轴突功能是将本神经元的输出信号(兴奋)传递给别的神经元,其末端的许多神经末梢使得兴奋可以同时传送给多个神经元。树突的功能是接受来自其它神经元的兴奋。神经元细胞体将接收到的所有信号进行简单地处理后,由轴突输出。神经元的轴突与另外神经元神经末梢相连的部分称为突触。
感知机
感知机是一类人造神经元,模拟这样的大脑神经网络处理数据的过程。
感知机模型如下图:
其中 x1,x2 为输入,b 为偏置,激活函数被称为符号函数(sign function)
感知机是一种基本的分类模型,类似于逻辑回归。不同的是感知机的逻辑函数用的是 sign,而逻辑回归用的是 Sigmoid 函数,感知机也具有连接权重和偏置。
感知机可以用来处理线性可分类问题,线性可不可分简单来说,就是可不可以用一条直线把图上两类点划分开。如第二张图所示,无论怎么画直线都无法将两类点分区开。
对于线性不可分问题一般用多层神经网络,
打开 http://playground.tensorflow.org/。
使用 playground 体会感知机的分类。
激活函数
Sigmoid 函数
sigmoid 函数 由于其单增及反函数单增等性,sigmoid 函数常被用做神经网络的激活函数,将变量映射到 0,1 之间。所以主要用来做二分类神经网络。 由于其平滑、易于求导的特性,处理特征相差不是很大或者复杂的数据效果比较好。
- sigmoid 函数的公式
- 使用 matplotlib 绘制 Sigmoid 函数
import numpy as np
import matplotlib.pyplot as plt
# 定义sigmoid函数:将变量定位0-1之间
def sigmoid(x):
return 1.0 / (1+np.exp(-x))
# 生成一串数-10 -- 10
x = np.arange(-10, 10)
# 指定画布大小
fig, ax = plt.subplots(figsize=(12, 4))
# 绘制, 指定绘制颜色, x, y, 参数
ax.plot(x, sigmoid(x), 'r')
# 显示绘图
plt.show()
执行结果如图所示:
双曲正切函数(tanh)
双曲正切函数(tanh) 是双曲正弦函数(sinh)与双曲余弦函数(cosh)的比值,语法格式如下:
双曲正切函数(tanh)与 tf.sigmoid 非常接近,且与后者具有类似的优缺点。
tf.sigmoid 和 tf.tanh 的主要区别在于后者的值域为[-1.0,1.0]。
- 使用 matplotlib 绘制 tanh 函数
import numpy as np
import matplotlib.pyplot as plt
# 准备x坐标, 等间距-10 10 之间100个点
x = np.linspace(-10, 10, 100)
# y直接调用numpy函数封装好的
y = np.tanh(x)
# 绘图
plt.plot(x, y)
# 显示
plt.show()
后序
陌生领域,感谢尚学堂的视频带领
初步学习神经网络,还是蛮激动的。
希望以后可以入门 机器学习、人工智能 等领域
加油!
以上是关于神经网络结构搜索(Neural Architecture search)的主要内容,如果未能解决你的问题,请参考以下文章
6s965-fall2022神经架构搜索 Neural Architecture Search
神经结构化学习 1 框架概述 Neural Structured Learning Part 1: Framework overview
神经网络机器翻译Neural Machine Translation: Achieving Open Vocabulary Neural MT
神经网络机器翻译Neural Machine Translation: Achieving Open Vocabulary Neural MT
神经结构化学习 3 使用合成图进行训练 Neural Structured Learning - Part 3: Training with synthesized graphs
神经结构化学习 2 使用自然图进行训练 Neural Structured Learning - Part 2: Training with natural graphs