卷积神经网络和多模态学习

目录

一、卷积神经网络的介绍

1.1 局部连接

1.2 权值共享

二、卷积神经网络在文本领域的运用

2.1 BERT模型

2.2 预训练模型

2.3 BERT模型的架构

2.4 BERT模型的输入表征

三、卷积神经网络在图像领域的运用

3.1 卷积神经网络处理图像

3.2 以mnist数据集为例

四、多模态学习研究综述

4.1 多模态的定义

4.2 多模态融合的方式

4.2.1 常见的多模态研究分为以下5类

4.2.2 常用的多模态交叉方式有两种

4.2.3 应用

4.2.4 多模态表征

一、卷积神经网络的介绍

卷积神经网络的提出是为了解决全连接网络在输入数量和隐藏层节点数增大时参数大量增加的问题,采用的方式仍然是参数共享。

  • 图像的特征提取总是可以通过在不同尺度上不断抽象而得到,而每一个尺度上的特征均可以通过领域特征来表示;
  • 自然图像有一些固有特征,这些特征在不同位置的表现是相同的,那么局部特征提取的参数是可以共享的。
  • 卷积层操作用于在不同的地方提取稳定的局部特征,池化层操作用于综合一个较大区域提取到的局部特征,以保持特征的不变性。
  • 卷积层包含多个核,每一个卷积核负责一种特征的提取,多个核的特征组合形成某一位置的一个特征向量。
  • 池化层将卷积后的特征矩阵分为2×2的窗口并取该窗口的最大值或者平均值作为该窗口的特征,从而减少在非显著特征区域提取特征对模型的干扰,同时也使得特征维度大大减小。
  • 卷积神经网络较全连接神经网络参数大大减小,可以构建多层网络对不同粒度上的特征进行抽象。多层卷积神经网络通过交替进行卷积和池化操作来实现,最后将各个卷积核的特征进行结合,然后连接成一个全连接网络作为输出层。

卷积神经网络的两大主要思想是局部连接(Sparse Connectivity)和权值共享(Shared Weights)。

卷积神经网络包含了一个由卷积层子采样层构成的特征抽取器。在卷积神经网络的卷积层中,一个神经元只与部分邻层神经元连接。在CNN的一个卷积层中,通常包含若干个特征平面(featureMap),每个特征平面由一些矩形排列的的神经元组成,同一特征平面的神经元共享权值,这里共享的权值就是卷积核。卷积核一般以随机小数矩阵的形式初始化,在网络的训练过程中卷积核将学习得到合理的权值。共享权值(卷积核)带来的直接好处是减少网络各层之间的连接,同时又降低了过拟合的风险。子采样也叫做池化(pooling),通常有均值子采样(mean pooling)和最大值子采样(max pooling)两种形式。子采样可以看作一种特殊的卷积过程。卷积和子采样大大简化了模型复杂度,减少了模型的参数。

对于总体网络来说:卷积是用来获取特征的,而NN是用来将获取的特征输入进行决策(分类)的。即卷积作为眼睛,而NN作为大脑

1.1 局部连接

卷积核的大小代表了神经元的感受野,感受野在输入空间中起局部作用,因而能够更好地挖掘出存在于自然图像中强烈的局部空间相关性,这是对图像处理来说非常有效的手段。

如下图左图,是NN的神经元的连接方式,可以看出NN是全局感受野,而右图每一个红色矩形便是对应神经元的感受域,每个神经元只与感受域内的神经元连接,紫色矩形表示CNN卷积层的一个特征图。

1.2 权值共享

权值共享简单的来说,对于一个卷积层的N个特征图来说,每一个特征图的卷积核参数是共享的,这大大减少了参数量。下面给出一个例子:

若我们有50×50个像素的图像,有2500个隐藏层的神经元,如果全连接,就有50x50×2500=6250000个连接,也就是6250000个权值参数。权值共享就是说如果我们对这6250000个神经元的每一个神经元都连接5x5个元素的图像区域,而且每一个神经元存在10x10=100个连接权值参数都是一样的那么我们就大大减少了参数数量了,从6250000变成2500。 但是这样我们的每一层神经元均使用同一个卷积核,这样我们只能提取一种特征,因此我们可以增加卷积核的数量,这样我们就能得到多种特征,若有一百种特征,我们最终需要的参数数量也仅仅是2500。

二、卷积神经网络在文本领域的运用

在文本领域,卷积核池化操作都是在一维上进行的。

文本的卷积操作可以很好地提取文本地局部特征。每一次卷积操作对相邻的m个词进行特征提取,采用不同的卷积核对同一窗口的卷积相当于对传统N-gram模型的向量表示,而平均池化可看作对文本中各种词组特征的综合。最大池化实际上是对文本中通过不同位置卷积得到的多个N-gram特征进行选择,由于文本没有类似图像中较为固定的空间金字塔抽象特性,对文本很少出现多层的卷积和池化交替,一般是在句子、段落、文本三个层级分别做卷积和池化。

2.1 BERT模型

2018年,BERT模型(Bidirectional Encoder Representation from Transformer)被谷歌提出后就得到业界的关注,与ELMo模型和Fine-Tuning Transformer等预训练模型相比,BERT在训练双向语言模型时会以较小的概率把少量词汇替换成随机的词或替换成Mask,这有利于增强模型对上下文的记忆。BERT的第二个预训练任务是下一句预测任务,这个任务主要是让模型能够更好地理解句子间的关系。

BERT模型具有窄而深的特点,BERT的深度有12层,其中间层宽度只有1024,与Transformer模型的中间层有2048相比,BERT模型更窄。这也印证了图像处理中,“深而窄”比“宽而浅”的模型更好。

2.2 预训练模型

预训练是指,利用训练集A对网络进行训练,得到对应的网络参数;当面对新的任务B时,其网络结构不变,网络参数初始化的时候,低层的网络参数固定为在任务A上训练的数据,同时高层参数初始化是随机的。然后用B任务来训练调整高层的网络参数。初始化参数不变的网络层称为frozen层,随着对B任务的训练而调整高层网络参数的步骤叫做微调(fine-tuning),即对网络中的部分层参数进行微调,使其更加适合当前的任务。这样做的优点是对B训练集要求少,在A训练集的基础下训练B,训练效果更好。

预训练的主要任务:

(1)遮挡语言模型

BERT(Bidirectional Encoder Representation from Transformer,双向的转换解码器)与其他语言模型不同,旨在通过联合调节所有层中的上下文来预先训练深度双向表示,因此可以通过一个额外的输出层来进行微调,无须对模型架构进行大规模修改就可以应用,提出用MLM(遮盖语言模型)来克服单向局限性,并且可以结合上下文的信息。

原理:把语料中15%的token替换成[mask],其中选择10%保持不变,10%随机替换成其他词块,剩余的80%用[MASK]替换。但是如果都用标记的[mask]来替代token,模型效果会受到影响,Transformer不知道哪些单词已被随机单词替换,也不知道它被要求预测哪些单词,因此,它的每个输入词块都要用分布式语义表示。

(2)下一句预测任务

预测下一句(Next Sentence Prediction,NSP)模型通过添加Next Sentence Prediction的预训练方法捕获两个句子的联系

句子A(input)句子B(input)Label
[CLS] the man went to [MASK] store [SEP]he bought a gallon [MASK] milk [SEP]IsNext
[CLS] the man went to [MASK] store [SEP]penguin [MASK] are flight ## less birds [SEP]Not Next

2.3 BERT模型的架构

主要创新点在于使用了预训练的方法,用MLM捕捉词语级别的表示,用NSP任务来捕捉句子级别的表示。

本质是一个多层双向的Transformer编码器。

2.4 BERT模型的输入表征

通过线性序列的形式进行输入,两个句子之间通过分隔符来分割,在序列的最前面和最后面增加两个标识符,每一个单词的输入由三部分信息组成

Token embedding词向量,第一个单词的词向量表示为CLS,用于进行分类。
Segment embedding用来区别两种句子,前面提到的BERT的训练数据都是由两个句子构成的,预训练在执行语言模型任务的同时还要执行以两个句子为输入的分类任务。
Positional embedding表示位置信息,在自然语言处理中,单词的顺序是很重要的,所以需要对位置信息进行编码

添加图片 

三、卷积神经网络在图像领域的运用

3.1 卷积神经网络处理图像

3.2 以mnist数据集为例

import numpy as np
import tensorflow as tf
from matplotlib import pyplot as plt
import matplotlib as mpl
import sklearn
from sklearn import metrics
from tensorflow.keras.utils import plot_model
from tensorflow.keras import backend as K
import random

def dataModelPreparation():

    # 本地读取MNIST数据
    path = 'mnist.npz'
    f = np.load(path)
    x_train, y_train = f['x_train'], f['y_train']
    x_test, y_test = f['x_test'], f['y_test']
    f.close()

    #为便于评测,图像尺寸缩小为原来的一半
    h = x_train.shape[1] // 2
    w = x_train.shape[2] // 2

    x_train = np.expand_dims(x_train, axis=-1)
    x_train = tf.image.resize(x_train, [h, w]).numpy()  # if we want to resize
    x_test = np.expand_dims(x_test, axis=-1)
    x_test = tf.image.resize(x_test, [h, w]).numpy()  # if we want to resize


    # 图像归一化,易于网络学习
    x_train = x_train.astype('float32')  # float32和float64所占内存的大小会影响运行的效率
    x_test = x_test.astype('float32')
    x_train /= 255.0
    x_test /= 255.0


    #WORK1: --------------BEGIN-------------------
    #请补充完整训练集和测试集的产生方法:
    n_classes = 10
    # 请将训练集和测试集的标签转换为one-hot编码
    y_train = tf.one_hot(y_train, n_classes)
    y_test = tf.one_hot(y_test, n_classes)

    # 请补充建立训练集和测试集的代码
    train_datasets = tf.data.Dataset.zip(
        (tf.data.Dataset.from_tensor_slices(x_train), tf.data.Dataset.from_tensor_slices(y_train))).batch(
        64)

    test_datasets =  tf.data.Dataset.zip(
        (tf.data.Dataset.from_tensor_slices(x_test), tf.data.Dataset.from_tensor_slices(y_test))).batch(
        64)
    #WORK1: ---------------END--------------------


    #WORK2: --------------BEGIN-------------------
    #请参考所给网络结构图,补充完整共享参数孪生网络siamese_net的实现:
    #注意,我们用比较图片的方法来评测网络结构是否正确
    #所以网络结构中的参数维度、名称等需和参考图中一致,否则不能通过评测
    inputs = tf.keras.Input(shape=(14, 14, 1), name='data')
    cov1 = tf.keras.layers.Conv2D(16, (3, 3), strides=(1, 1),name='conv1')(inputs)  # 设置卷积核的大小为3×3,stride为1
    pool1 = tf.keras.layers.MaxPool2D(pool_size=(2, 2), strides=2,  name='pool1')(cov1)  # , padding='valid' 这里步长为2?默认与pool_size相同
    cov2 = tf.keras.layers.Conv2D(16, (1, 1), strides=(1, 1), padding='same' ,name='conv2')(pool1)  # 这一层米有变化
    pool2 = tf.keras.layers.MaxPool2D(pool_size=(2, 2), strides=2, name='pool2')(cov2)
    flat = tf.keras.layers.Flatten(name='flat')(pool2)
    fc1 = tf.keras.layers.Dense(84, kernel_initializer='he_uniform', activation='relu', name='fc1')(flat)
    outputs = tf.keras.layers.Dense(10, activation='softmax', name='output')(fc1)
    
    #WORK2: ---------------END--------------------  

    model = tf.keras.Model(inputs=inputs, outputs=outputs, name='conv_net')

    plot_model(model, to_file='conv_net.png', show_shapes=True, expand_nested=True)
    
    return train_datasets, test_datasets, model

#WORK3: --------------BEGIN-------------------
#实例化网络并进行训练    
def test_fun():
    train_datasets, test_datasets, model = dataModelPreparation()
    #3.1 model compile,请选择适用于图像分类任务及one-hot编码的loss
    model.compile(
        optimizer=tf.keras.optimizers.SGD(learning_rate=0.01),
        loss=tf.keras.losses.categorical_crossentropy,
        metrics=['acc']
    )
    #3.2 配置训练参数,开始训练,
    history = model.fit(train_datasets
        ,
        validation_data=test_datasets,
        epochs=4,
        verbose = 2
    )
    return model, history
#WORK3: ---------------END--------------------      
    
    
########### 以下为测试代码,评测时自动调用,请不要取消注释!!! #####
# from siamese_work import test_fun
# import matplotlib.pyplot as plt
# import matplotlib.image as mpimg
# import numpy as np

# import os

# model, history = test_fun()

#1.用图片对比的方法测试网络结构是否正确
# test_img = mpimg.imread('./test_figure/step1/conv_net.png')
# answer_img= mpimg.imread('./path/to/answer.png')
# assert((answer_img == test_img).all())
# print('Network pass!')


#2.测试网络训练是否达标
# if history.history['val_acc'][-1] > 0.90:
#     print("Success!")

四、多模态学习研究综述

4.1 多模态的定义

多模态指的是多种模态的信息,包括:文本、图像、视频、音频等。多模态研究的就是这些不同类型的数据的融合的问题。多模态研究的是视觉语言问题,其任务是关于图像和文字的分类、问答、匹配、排序、定位等问题。

输入Input输出Output
VQA(Visual Question Answering)视觉问答一张图片、一个自然语言描述的问题答案(单词或短语)
Image Caption 图像字幕一张图片图片的自然语言描述(一个句子)
Referring Expression Comprehension 指代表达一张图片、一个自然语言描述的句子判断句子描述的内容(正确或错误)
Visual Dialogue 视觉对话一张图片两个角色进行多次交互、对话
VCR (Visual Commonsense Reasoning) 视觉常识推理1个问题,4个备选答案,4个理由正确答案,和理由
NLVR(Natural Language for Visual Reasoning)自然语言视觉推理2张图片,一个分布true或false
Visual Entailment 视觉蕴含图像、文本3种label的概率。(entailment、neutral、contradiction)蕴含、中性、矛盾
Image-Text Retrieval 图文检索

1)以图搜文。输入图片,输出文本

2)以文搜图。输入文本,输出图片

3)以图搜图,输入图片,输出图片

/

4.2 多模态融合的方式

人类通过多种感觉器官接触世界,例如眼睛、耳朵、触觉。多模态机器学习(Multimodal Machine Learning)研究包含不同模态数据的机器学习问题。常见的模态包括:视觉、文字、声音。它们通常来自于不同的传感器,数据的形成方式和内部结构有很大的区别。图像是自然届存在的连续空间,而文本是依赖人类知识、语法规则组织的离散空间。多模态数据的异质性(heterogeneity)对如何学习多模态间关联性和互补性提出挑战。通过NLP的预训练模型,可以得到文本的嵌入表示;再结合图像和视觉领域的预训练模型,可以得到图像的嵌入表示。

4.2.1 常见的多模态研究分为以下5类

表征如何挖掘模态间的互补性或独立性以表征多模态数据。
翻译学习一个模态到其他模态的映射。例如:image captioning。
对齐将多模态数据的子元素进行对齐。例如phrase grounding任务:将一幅图中的多个物体与一段话中的短语(或单词)进行对齐。在学习表征或翻译时也可能隐式地学习对齐。
融合融合两个模态的数据,用来进行某种预测。例如:Visual Question Answering需融合图像和问题来预测答案;Audio-visual speech recognition需融合声音和视频信息用以识别说话内容。
共同学习(co-learning)模态间的知识迁移。使用辅助模态训练的网络可以帮助该模态的学习,尤其是该模态数据量较小的情况下。

4.2.2 常用的多模态交叉方式有两种

【1】点乘或者直接追加

此种方式将文本和图像分别进行Embedding,之后将各自的向量进行追加或者点乘。好处是简单方便,计算成本也比较低。

【2】另外一种模态交叉的方式是最近用得比较多的Transformer

其好处是利用了Transformer架构,能够更好地进行图像特征和文本特征的表示。缺点是占用空间大,计算成本较高。

文章链接:BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation

4.2.3 应用

2000年左右,互联网的兴起促进了跨模态检索的应用。早期搜索引擎人们使用文本(关键词)来搜索图片、视频,近年来出现以图搜图,以图搜视频等。接着,基于多模态数据的人类社交行为理解被提出。通过分析会议录像(语言和视觉)信息可以进行人的情感识别(affect recogntion)。2015年后,联合视觉与语言的任务大量出现并逐渐成为热点。代表性任务是图像描述(image captioning),即生成一句话对一幅图的主要内容进行描述。当然,以文本-->图像,视频-->文本,文本-->视频等生成任务也被提出。

  • 跨模态预训练

    图像/视频与语言预训练
    跨任务预训练
  • 定位相关的任务

  • 更多模态

4.2.4 多模态表征

讨论:相较于多模态,基于单模态的表征学习已被广泛且深入地研究。在Transformer出现之前,不同模态所适用的最佳表征学习模型不同,例如,CNN广泛适用CV领域,LSTM占领NLP领域。较多的多模态工作仍旧局限在使用N个异质网络单独提取N个模态的特征,之后采用Joint或Coordinated结构进行训练。不过这种思路在很快改变,随着越来越多工作证实Transformer在CV和NLP以及Speech领域都可以获得极佳的性能,仅使用Transformer统一多个模态、甚至多个跨模态任务成为可能。基于Transformer的多模态预训练模型在2019年后喷涌而出,如LXMERT[1], Oscar[2], UNITER[3]属于Joint结构,CLIP[4], BriVL[5] 属于Coordinated结构。

讨论举例法面临两个问题:一是需要维护一个大词典,且每次翻译都需要进行全局检索,使得模型巨大且推理速度慢(hashing可缓解此问题)。二是此类方法较机械,仅仅是复制(或简单修改)训练集的数据,无法生成准确且新奇的翻译结果。生成式方法可以生成更为灵活、相关性更强、性能更优的翻译结果。其中,基于语法模版的方式受限于模版的多样性,生成的语句多样性有限,且不是端到端训练。现今,编码-解码器与连续性生成是主流方案,它们一般基于深度网络且端到端训练。

跨模态翻译的评估困境:评估语音识别模型的性能是容易的,因为正确的输出有且只有一种。但对于大多数翻译任务来说(视觉<-->文本、文本-->语音等),模态间的映射是一对多的,输出存在多个正确结果。例如图像描述,不同的人会使用不同的语句对同一幅图像进行描述,因此模型的评估常常是主观的。人工评价是最理想的评估,但是耗时耗钱,且需要多样化打分人群的背景以避免偏见。自动化指标是视觉描述领域常用的替代方法,包括BLEU,Meteor,CIDEr,ROUGE等,但它们被证实与人的评价相关性较弱。基于检索的评估弱化任务(例如:将图像描述中一对多映射简化为VQA中一对一的映射)也是解决评估困境的手段。

 

参考帖子:多模态学习综述及最新方向

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值