zoukankan      html  css  js  c++  java
  • 《Bottle-neck 网络好用吗?》

    Bottle-neck 网络好用吗?

    bottle-neck 是一种将信息压缩再放大的神经网络结构。这种结构很常见:大一点的比如自编码器,小的比如 squeeze-net 里的 fire-module。这篇文章将带初学者粗略浏览一下这个结构的用处。

    结论:

    1. 降维又升维,类似 NMF,具有去除高频噪声的作用。
    2. bottleneck design 好不好,难以严谨定论。但根据表达理论,信息损失是必要的。
    3. 经验上 bottle neck 在许多论文中都获得了比传统卷积网络、全连接网络更好的准确度。——经验上 bottle neck 在许多论文中都获得了比传统卷积网络、全连接网络更好的准确度。==> 为什么要重建?重建的作用是什么?
    4. 目前的 bottle neck 设计思路,是压缩表达、压缩感知技术的一个不完美的尝试。

    为什么这么说呢?

    NMF 去噪太经典就不讲了,说说其他的。

    图像、声音都是信号,为了能保证包含所需信息,信号采样范围都很广。举几个例子:

    1. 比如,图像有红绿蓝三个通道,人脸识别只需一个通道就够了,冗余了两个通道。
    2. 又如,声音采样包括了高中低频,但是支付宝声纹支付只需要高频而已,中低频都是冗余的噪声。
    3. 再如,wifi 电磁波信号包含了数字电平,和信号强度,但是数据传输只需要数字电平,强度信息是冗余信息。

    然而,若将图像中冗余的 “绿、蓝” 两个通道扔掉,饮料分类模型就无法区分不同口味的 Rio 饮料了,也就无法做阿里巴巴智能超市了。同理,把中低频作为冗余扔掉,人类语音识别模型就失效了。

    因此我们发现:

    1. 出于很复杂的原因,可及的视音频数据包含的信息极为丰富多样,甚至这世界上居然有 224 个颜色通道的图片 / 视频。所有的信息不分贵贱都是一样有用。比如 WIFI 信号的强弱可以用来做室内定位,甚至只需要一个 wifi 发射器,就可以对没带手机的人进行定位,这些信号强弱的噪音甚至可以用来辅助检测肢体动作。
    2. 针对任意一个具体的需求(人脸识别、物体跟踪、声音识别...),数据里有用的信息只占少数,绝大多数都属于冗余的无关噪声。

    很多通道的光谱遥感图像

    根据表达理论,我们提取的特征,分类的结果,都是信息的一种 "表达形式" 而已。而算法需要的,是要排除掉无用信息,仅保留有用信息的表达形式。比如在人脸验证算法中,研究者随机抽取了 80 个神经元,其中近一半传递与身份关系不大的信息,比如戴眼镜、是否转头、张闭嘴,微笑等,另外一半才是与身份有关的信息,比如肤色、性别、颧骨高低等。研究者剔除了与身份无关的神经元,获得了出色的效果 [论文链接]。

    由此可见什么样的网络才是优秀的:

    1. 需要 “身份特征值” 时,模型输出对同一人的不同照片保持不变,当身份改变时,输出才变化。
    2. 需要 “物体分类器” 时,模型输出对同一物体多角度有不变性,当物类改变时,结果才变化。

    与人脸喜怒、物体角度相关的信息都被丢弃了,环境光强弱的信息也一并丢失。这样才能仅剩下身份信息。因此,为了服务于特定目的,也为了精简网络规模,无用信息的损失是必要的。

    另外,数据本身也是臃肿需要精简的。

    我们拿 512x512 彩色图片举例:每个像素包含 3 个色点。图片包含了 78 万个色点,每个色点的取值都是 0-255 之间。那么总共有 256^786432 种不同的 512 宽度彩图。相比之下,可观测宇宙中的原子个数仅约 6x10^83 个。

    GAN 生成的图,看不出是啥玩意

    但这么多的图片,绝大多数是没有意义的,比如狮身人面屎图就没有意义。能够资格称为图片的,只占一小部分,它们需要有清晰的轮廓,且包含人类能理解的几万种常见物体。如果包含人类不能理解的物体,那么就是没意义的图片。所以,图片其实可以通过一些简短的描述来压缩。比如长宽高,包含哪些物体,什么位置、角度、颜色、材质、光照.. 这些可以说足够了。

    78 万个变数,编写一个 1080P 画质精湛的游戏都用不了那么多好吧!

    虚幻 4 游戏引擎渲染生成的图片

    这个现象从理论上可描述为:图片是高维空间中的低维流型。

    从生成式角度可解释为:存在一个生成模型,可以由非常少的参数生成真实图片。虚幻 4 能,画家也能。

    所以,我们自然希望能够获得图片的简短表达,从而降低分类器的参数、降低模型的复杂性。具有 bottle-neck 的自编码器就能做到这一点。

    自编码器用到的沙漏网络 (sand-glass network) 是在空间域上压缩表达。如果想在深度上压缩表达、自然也可以用 bottle-neck,它获得的中间表达固然是低维的 去噪的,也可以用来大致恢复 feature-map,用 bottle-neck 网路无监督地提取特征也广泛地应用在物体分类中。但是不是只有这种方法能获得低维表达呢?

    当然不是,降维的方法多的是,无监督 pca、有监督 lda、流型对齐,Predictability Minimization... 不一而足。

    • 那么 bottleneck 思想获得的特征,含义清晰整洁么?不一定,你看 VAE 的特征是个高斯噪声。
    • 含义不清晰的简洁特征,分类效果好么?不一定,你看 VAE 的特征是个高斯噪声... 但是 AE 特征分类就很好。
    • 含义清晰整洁的简洁特征分类效果一定好么?不一定。你看 VAE... 呃不,你拿筛选后的特征判断图像色调就会失败。

    所以不能说特征含义清晰好,不能说含义模糊不好,我们也难以控制 bottle-neck 特征含义的清晰性。

    这么多不可控和难以分析的因素,使得 bottle-neck 的优良性只能通过实践来探究。

    还好,实践的效果蛮不错!

  • 相关阅读:
    unable to import maven project see logs for details
    全栈工程师:第一章:NodeJS的安装与配置
    Unable to open debugger port (127.0.0.1:63959): java.net.SocketException "socket closed",编译过来就是无法打开调试器端口,套接字已关闭
    我的分享:第七章:数据埋点
    我的分享:第六章:IDEA的优秀插件
    我的分享:第五章:java程序员一个人搭建网站(静态的,动态的都有)
    Docker:第三章:简单入门和深入理解
    我的分享:第四章:深入理解MySQL索引底层数据结构与算法
    NPM使用详解(上)
    JS实现继承的几种方式
  • 原文地址:https://www.cnblogs.com/cx2016/p/12868052.html
Copyright © 2011-2022 走看看