[Highway]论文实现:Highway Networks

简介: [Highway]论文实现:Highway Networks

论文:Highway Networks

作者:Rupesh Kumar Srivastava, Klaus Greff, Jürgen Schmidhuber

时间:2015

有大量的理论和经验证据表明,神经网络的深度是其成功的关键因素。然而,随着深度的增加,网络训练变得更加困难,而深度网络的训练仍然是一个开放的问题。在这个扩展的摘要中,论文引入了一种新的体系结构,旨在简化对非常深的网络的基于梯度的训练。论文将具有这种架构的网络称为Highway Networks,因为它们允许信息不受阻碍地流过Highway Networks上的几层。该架构的特点是使用门控单元,以学习调节通过网络的信息流。具有数百层的Highway Networks可以通过随机梯度下降和各种激活函数进行直接训练,为研究极其深层和高效的体系结构提供了可能性。

一、完整代码

这里笔者从实现的角度瞎搭了一个模型,对mnist数据集进行训练,由于是瞎整的架构,不用管效果如何!

import tensorflow as tf
import pandas as pd
# 定义highway
class HighWay(tf.keras.layers.Layer):
    def __init__(self, kernel_size):
        super(HighWay, self).__init__()
        self.kernel_size = kernel_size
    def build(self, input_shape):
        self.h = tf.keras.layers.Conv2D(input_shape[-1], self.kernel_size, padding='same', activation='relu')
        self.t = tf.keras.layers.Conv2D(input_shape[-1], self.kernel_size, padding='same', activation='sigmoid')
    def call(self, inputs):
        h = self.h(inputs)
        t = self.t(inputs)
        return h*t + inputs*(1-t)
# 准备数据
mnist = tf.keras.datasets.mnist
(train_x,train_y),(test_x,test_y) = mnist.load_data()
# 建立模型
model = tf.keras.models.Sequential([
    tf.keras.layers.Input(shape=(28,28)),
    tf.keras.layers.Reshape((28,28,1)),
    HighWay(2),
    tf.keras.layers.MaxPool2D(),
    HighWay(2),
    tf.keras.layers.MaxPool2D(),
    HighWay(2),
    tf.keras.layers.MaxPool2D(),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(300, activation='relu'),
    tf.keras.layers.Dropout(rate=0.5),
    tf.keras.layers.Dense(200, activation='relu'),
    tf.keras.layers.Dropout(rate=0.5),
    tf.keras.layers.Dense(10, activation='softmax'),
])
model.compile(
    loss=tf.keras.losses.SparseCategoricalCrossentropy(),
    optimizer='adam',
    metrics=['accuracy']
)
history = model.fit(x=train_x, y=train_y, epochs=10, verbose=1)
# 画图
pd.DataFrame(history.history).plot()

结果如下:

二、论文解读

    由于链式法则,对于传统网络,随着训练层数的递增,每一层所含有的信息会减少,为了避免出现这样的情况, 可以使用Highway Networks解决这一情况,注意:这里解决的不是梯度爆炸或者梯度消失的问题;

2.1 模型架构

深度神经网络的每一层基本可以看做一个非线性转化过程,非常多的这种非线性转化可以表达一些非常复杂的函数,这是神经网络的本质;我们现在对某一层进行分析:

y=H(x,WH)

这里xinputs 输入层, y是 outputs 是输出层, WH 是参数,这个函数表明inputs WH 进行一次非线性转换得到  outputs;这是传统的模型层结构;


可以从这个结构中看出,经过一次非线性转化后, x的信息发生了改变,变成了  y,为了降低信息损失,Highway采用了一种方式:即在 outputs 中加上 inputs, 公式如下:

y=H(x,WH)T(x,WT)+xC(x,WC).

其中  H,  TC表示的是三个非线性函数,W C W_C WC表示的是各个函数中的参数;值得注意的是:这里去掉  T,  C这两个函数即为ResNet模型


其中 T被称为transform gateC被称为carry gate,为了方便起见,这里令 C=1T;模型变为:

y = y=H(x,WH)T(x,WT)+x(1T(x,WC)).

从模型中可以看出,要保证这个等式成立,我们需要满足xy,  H,  T的维度尺寸相等,即此层结构不会影响输出结构;


同时,令 T的非线性为sigmoid,这样能映射到 [01]这个区间内,保证 T,  C都产生一个大于0的数;

2.2 模型效果

三、过程实现

这里以卷积网络为例子,生成Highway Layer的代码如下:

class HighWay(tf.keras.layers.Layer):
    def __init__(self, kernel_size):
        super(HighWay, self).__init__()
        self.kernel_size = kernel_size
    def build(self, input_shape):
        self.h = tf.keras.layers.Conv2D(input_shape[-1], self.kernel_size, padding='same', activation='relu')
        self.t = tf.keras.layers.Conv2D(input_shape[-1], self.kernel_size, padding='same', activation='sigmoid')
    def call(self, inputs):
        h = self.h(inputs)
        t = self.t(inputs)
        return h*t + inputs*(1-t)

四、整体总结

没什么好总结的,感觉ResNet是抄袭Highway;


目录
相关文章
|
3月前
|
机器学习/深度学习 算法 Python
【博士每天一篇文献-算法】Overcoming catastrophic forgetting in neural networks
本文介绍了一种名为弹性权重合并(EWC)的方法,用于解决神经网络在学习新任务时遭受的灾难性遗忘问题,通过选择性地降低对旧任务重要权重的更新速度,成功地在多个任务上保持了高性能,且实验结果表明EWC在连续学习环境中的有效性。
90 2
【博士每天一篇文献-算法】Overcoming catastrophic forgetting in neural networks
|
3月前
|
机器学习/深度学习 算法
【博士每天一篇文献-综述】A wholistic view of continual learning with deep neural networks Forgotten
本文提出了一个整合持续学习、主动学习(active learning)和开放集识别(open set recognition)的统一框架,基于极端值理论(Extreme Value Theory, EVT)的元识别方法,强调了在深度学习时代经常被忽视的从开放集识别中学习识别未知样本的教训和主动学习中的数据查询策略,通过实证研究展示了这种整合方法在减轻灾难性遗忘、数据查询、任务顺序选择以及开放世界应用中的鲁棒性方面的联合改进。
31 6
|
3月前
|
机器学习/深度学习 存储 人工智能
【博士每天一篇文献-综述】Brain-inspired learning in artificial neural networks a review
这篇综述论文探讨了如何将生物学机制整合到人工神经网络中,以提升网络性能,并讨论了这些整合带来的潜在优势和挑战。
41 5
|
3月前
|
机器学习/深度学习 算法 Go
【博士每天一篇文献-算法】Progressive Neural Networks
本文介绍了渐进式网络(Progressive Neural Networks),一种深度强化学习架构,通过在训练过程中学习预训练模型间的侧向连接实现跨任务知识迁移,有效利用迁移学习优势同时避免灾难性遗忘,并通过强化学习任务验证了架构性能。
39 1
|
3月前
|
机器学习/深度学习 存储 算法
【博士每天一篇文献-综述】Continual lifelong learning with neural networks_ A review
这篇综述论文深入探讨了神经网络在终身学习领域的研究进展,包括生物学启发的概念、终身学习方法的分类与评估,以及未来研究方向,旨在解决神经网络在学习新任务时如何避免灾难性遗忘的问题。
37 2
|
3月前
|
机器学习/深度学习 算法 TensorFlow
【文献学习】Analysis of Deep Complex-Valued Convolutional Neural Networks for MRI Reconstruction
本文探讨了使用复数卷积神经网络进行MRI图像重建的方法,强调了复数网络在保留相位信息和减少参数数量方面的优势,并通过实验分析了不同的复数激活函数、网络宽度、深度以及结构对模型性能的影响,得出复数模型在MRI重建任务中相对于实数模型具有更优性能的结论。
35 0
【文献学习】Analysis of Deep Complex-Valued Convolutional Neural Networks for MRI Reconstruction
|
6月前
|
Python
[Knowledge Distillation]论文分析:Distilling the Knowledge in a Neural Network
[Knowledge Distillation]论文分析:Distilling the Knowledge in a Neural Network
35 1
|
6月前
Simplifying Graph Convolutional Networks论文笔记
Simplifying Graph Convolutional Networks论文笔记
|
机器学习/深度学习 自然语言处理 算法
【论文泛读】 知识蒸馏:Distilling the knowledge in a neural network
【论文泛读】 知识蒸馏:Distilling the knowledge in a neural network
【论文泛读】 知识蒸馏:Distilling the knowledge in a neural network
|
机器学习/深度学习 算法
Keyphrase Extraction Using Deep Recurrent Neural Networks on Twitter论文解读
该论文针对Twitter网站的信息进行关键词提取,因为Twitter网站文章/对话长度受到限制,现有的方法通常效果会急剧下降。作者使用循环神经网络(recurrent neural network,RNN)来解决这一问题,相对于其他方法取得了更好的效果。
101 0