[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;


目录
相关文章
|
5天前
|
Python
[Knowledge Distillation]论文分析:Distilling the Knowledge in a Neural Network
[Knowledge Distillation]论文分析:Distilling the Knowledge in a Neural Network
12 1
|
机器学习/深度学习 搜索推荐 算法
Learning Disentangled Representations for Recommendation | NIPS 2019 论文解读
近年来随着深度学习的发展,推荐系统大量使用用户行为数据来构建用户/商品表征,并以此来构建召回、排序、重排等推荐系统中的标准模块。普通算法得到的用户商品表征本身,并不具备可解释性,而往往只能提供用户-商品之间的attention分作为商品粒度的用户兴趣。我们在这篇文章中,想仅通过用户行为,学习到本身就具备一定可解释性的解离化的用户商品表征,并试图利用这样的商品表征完成单语义可控的推荐任务。
23696 0
Learning Disentangled Representations for Recommendation | NIPS 2019 论文解读
|
5天前
Simplifying Graph Convolutional Networks论文笔记
Simplifying Graph Convolutional Networks论文笔记
|
9月前
|
机器学习/深度学习 算法
Keyphrase Extraction Using Deep Recurrent Neural Networks on Twitter论文解读
该论文针对Twitter网站的信息进行关键词提取,因为Twitter网站文章/对话长度受到限制,现有的方法通常效果会急剧下降。作者使用循环神经网络(recurrent neural network,RNN)来解决这一问题,相对于其他方法取得了更好的效果。
61 0
|
机器学习/深度学习 自然语言处理 算法
【论文泛读】 知识蒸馏:Distilling the knowledge in a neural network
【论文泛读】 知识蒸馏:Distilling the knowledge in a neural network
【论文泛读】 知识蒸馏:Distilling the knowledge in a neural network
|
机器学习/深度学习 数据可视化 算法
深度学习论文阅读图像分类篇(二):ZFNet《Visualizing and Understanding Convolutional Networks》
大型卷积网络模型最近在ImageNet基准测试Krizhevsky等[18]上表现出了令人印象深刻的分类性能。然而,人们还没有明确的理解他们为什么表现如此之好,或者如何改进它们。在本文中,我们将探讨这两个问题。我们介绍了一种新的可视化技术,可以深入了解中间特征层的功能和分类器的操作。
74 0
|
机器学习/深度学习 搜索推荐 算法
【推荐系统论文精读系列】(十)--Wide&Deep Learning for Recommender Systems
具有非线性特征转化能力的广义线性模型被广泛用于大规模的分类和回归问题,对于那些输入数据是极度稀疏的情况下。通过使用交叉积获得的记忆交互特征是有效的而且具有可解释性,然后这种的泛化能力需要更多的特征工程努力。在进行少量的特征工程的情况下,深度神经网络可以泛化更多隐式的特征组合,通过从Sparse特征中学得低维的Embedding向量。可是,深度神经网络有个问题就是由于网络过深,会导致过度泛化数据。
142 0
【推荐系统论文精读系列】(十)--Wide&Deep Learning for Recommender Systems
|
机器学习/深度学习 算法 数据可视化
再介绍一篇最新的Contrastive Self-supervised Learning综述论文(三)
再介绍一篇最新的Contrastive Self-supervised Learning综述论文(三)
228 0
再介绍一篇最新的Contrastive Self-supervised Learning综述论文(三)
|
机器学习/深度学习 传感器 编解码
再介绍一篇最新的Contrastive Self-supervised Learning综述论文(一)
再介绍一篇最新的Contrastive Self-supervised Learning综述论文(一)
337 0
再介绍一篇最新的Contrastive Self-supervised Learning综述论文(一)