zoukankan      html  css  js  c++  java
  • CNN笔记

    • 传统CNN里的卷积核是一个generalized linear model(GLM)之后经过一个sigmoid(现在通常是ReLu)的非线性激励函数,假设卷积有K个filter,那么这K个filter代表的特征应该是可分的,或者说对属于同一个类别的不同变形具有不变性。
    • 但是通过GLM来建模,也就是假设这些latent的filter是线性可分的,显然这样的假设并不总是成立,甚至通常都不成立。
    • 传统的CNN为了解决这种不可分的问题,往往会选择比较多的filter个数,也就是比较大的K值,来保证所有的变形都被分到正确的concept里。
    • 比如说人和猫是不同的概念,但不是线性可分的,为了避免错分,我们只有建立更多的子概念(增加filter的个数),黄种人、黑人等等。
    • 但是过多的filter也会带来问题。主要有两个问题:1)首先是复杂的问题中这样的变形的个数往往过多,造成参数的急剧增加,2)这给下一层的网络的学习造成了困难,因为下一层网络的作用就是结合这一层的网络的信息,形成更高语义的信息,那么对于当前这一层当中相同概念的不同变形的filter,下一层必须要能够有一定的处理。
    • maxout网络可以通过分段线性的方法近似表示一个convex可分的问题,但是同样的,并不是所有的问题都是convex的。
    • 这说明我们需要更general的非线性的卷积核,也就是Network in Network中的micro network,文中提到的多层感知机(multilayer perceptron)。
    • multilayer perceptron的卷积核,实际相当于先做一个一般的卷积,再做几个1*1的卷积(只改变filter的个数,不改变feature map的大小)。
    • 这么看来,相当于构建了一个层次更深的网络。
    • Global average pooling 的合理性在于,经过了一个多层的复杂的网络之后,每一个filter代表的都是high-level的信息,而不是low-level的像一些曲线或者纹理之类的信息。对于这种high-level的信息,对整个feature map做pooling相当于检测这个map中有没有这个filter要检测的concept,这个pooling的结果已经可以很好地用来做分类或者检测之类的工作,不需要fully connected之后再训练分类器。
    • 总结起来,Network in Network 模型相当于一个更多层的cnn,通过多个1*1的卷积,将单个的卷积变得表示能力更强。再结合最后将fully connected替换为average pooling,使得模型的参数大大下降,也避免了overfitting的问题。一个层次更深,但或许参数更少的模型(因为fully connected的参数实在是太多了)。
  • 相关阅读:
    Metaclass
    Pydantic
    Alembic
    SQLAlchemy
    django2:路由path语法
    Django 学习笔记之模型高级用法
    Flask拾遗总汇1
    Flask中before_request与after_request使用
    Flask 中字典数据返回(jsonify)
    浅析django的abstract,proxy, managed
  • 原文地址:https://www.cnblogs.com/anyview/p/5111729.html
Copyright © 2011-2022 走看看