博客:blog.shinelee.me | 博客园 | CSDN

写在前面

这篇文章将从3个角度:加权模版匹配几何来理解最后一层全连接+Softmax。掌握了这3种视角,可以更好地理解深度学习中的正则项、参数可视化以及一些损失函数背后的设计思想。

全连接层与Softmax回顾

深度神经网络的最后一层往往是全连接层+Softmax(分类网络),如下图所示,图片来自StackExchange

先看一下计算方式全连接层将权重矩阵与输入向量相乘再加上偏置,将\(n\)个\((-\infty, +\infty)\)的实数映射为\(K\)个\((-\infty, +\infty)\)的实数(分数);Softmax将\(K\)个\((-\infty, +\infty)\)的实数映射为\(K\)个\((0, 1)\)的实数(概率),同时保证它们之和为1。具体如下:

\[\hat{\mathrm{y}} = softmax(\mathrm{z}) = softmax(\mathrm{W}^{T} \mathrm{x} + \mathrm{b})\]

其中,\(\mathrm{x}\)为全连接层的输入,\(W_{n \times K}\) 为权重,\(\mathrm{b}\)为偏置项,\(\hat{\mathrm{y}}\)为Softmax输出的概率,Softmax的计算方式如下:

\[softmax(z_j) = \frac{e^{z_j}}{\sum_K e^{z_j}}\]

若拆成每个类别的概率如下:

\[\hat{y_j} = softmax(z_j) = softmax(\mathrm{w}_{j} \cdot \mathrm{x} + b_j)\]

其中,\(\mathrm{w}_{j}\)为图中全连接层同一颜色权重组成的向量。

该如何理解?

下面提供3个理解角度:加权角度模版匹配角度几何角度

加权角度

加权角度可能是最直接的理解角度。

通常将网络最后一个全连接层的输入,即上面的\(\mathrm{x}\),视为网络从输入数据提取到的特征

\[z_j = \mathrm{w}_{j} \cdot \mathrm{x} + b_j = w_{j1} x_1 + w_{j2} x_2 + \dots + w_{jn} x_n + b_j\]

将\(\mathrm{w}_{j}\)视为第\(j\)类下特征的权重,即每维特征的重要程度、对最终分数的影响程度,通过对特征加权求和得到每个类别的分数,再经过Softmax映射为概率。

模板匹配

也可以将\(\mathrm{w}_{j}\)视为第\(j\)类的特征模板,特征与每个类别的模板进行模版匹配,得到与每个类别的相似程度,然后通过Softmax将相似程度映射为概率。如下图所示,图片素材来自CS231n

如果是只有一个全连接层的神经网络(相当于线性分类器),将每个类别的模板可以直接可视化如下,图片素材来自CS231n。

如果是多层神经网络,最后一个全连接层的模板是特征空间的模板,可视化需要映射回输入空间。

几何角度

仍将全连接层的输入\(\mathrm{x}\)视为网络从输入数据提取到的特征,一个特征对应多维空间中的一个点。

如果是二分类问题,使用线性分类器\(\hat{y} = \mathrm{w} \cdot \mathrm{x} + b\),若\(\hat{y}>0\)即位于超平面的上方,则为正类,\(\hat{y}<0\)则为负类。

多分类怎么办?为每个类别设置一个超平面,通过多个超平面对特征空间进行划分,一个区域对应一个类别。\(\mathrm{w}_{j}\)为每个超平面的法向量,指向正值的方向,超平面上分数为0,如果求特征与每个超平面间的距离(带正负)为

\[d_j = \frac{\mathrm{w}_{j} \cdot \mathrm{x} + b_j}{||\mathrm{w}_{j}||}\]

而分数\(z_j = ||\mathrm{w}_{j}|| d_j\),再进一步通过Softmax映射为概率。

如下图所示:

Softmax的作用

相比\((-\infty, +\infty)\)范围内的分数,概率天然具有更好的可解释性,让后续取阈值等操作顺理成章。

经过全连接层,我们获得了\(K\)个类别\((-\infty, +\infty)\)范围内的分数\(z_j\),为了得到属于每个类别的概率,先通过\(e^{z_j}\)将分数映射到\((0, +\infty)\),然后再归一化到\((0 ,1)\),这便是Softmax的思想:

\[\hat{y_j} = softmax(z_j) = \frac{e^{z_j}}{\sum_K e^{z_j}}\]

总结

本文介绍了3种角度来更直观地理解全连接层+Softmax,

  • 加权角度,将权重视为每维特征的重要程度,可以帮助理解L1、L2等正则项
  • 模板匹配角度,可以帮助理解参数的可视化
  • 几何角度,将特征视为多维空间中的点,可以帮助理解一些损失函数背后的设计思想(希望不同类的点具有何种性质)

视角不同,看到的画面就不同,就会萌生不同的idea。有些时候,换换视角问题就迎刃而解了。

以上。

参考

直观理解神经网络最后一层全连接+Softmax的更多相关文章

  1. 机器不学习:CNN入门讲解-为什么要有最后一层全连接

    哈哈哈,又到了讲段子的时间 准备好了吗? 今天要说的是CNN最后一层了,CNN入门就要讲完啦..... 先来一段官方的语言介绍全连接层(Fully Connected Layer) 全连接层常简称为 ...

  2. CNN入门讲解-为什么要有最后一层全连接?

    原文地址:https://baijiahao.baidu.com/s?id=1590121601889191549&wfr=spider&for=pc 今天要说的是CNN最后一层了,C ...

  3. 【TensorFlow/简单网络】MNIST数据集-softmax、全连接神经网络,卷积神经网络模型

    初学tensorflow,参考了以下几篇博客: soft模型 tensorflow构建全连接神经网络 tensorflow构建卷积神经网络 tensorflow构建卷积神经网络 tensorflow构 ...

  4. 全连接与softmax[转载]

    转自:https://www.jianshu.com/p/88bb976ccbd9 1.全连接示例: 2.softmax softmax输入层应和输出层(输出维度与类别数一致)纬度一样,如果不一样,就 ...

  5. 神经网络全连接层+softmax:

    如下图:(图片来自StackExchange) 强化说明全连接层: 1.通常将网络最后一个全连接层的输入,即上面的x \mathrm{x}x,视为网络从输入数据提取到的特征. 2. 强化说明softm ...

  6. Tensorflow 多层全连接神经网络

    本节涉及: 身份证问题 单层网络的模型 多层全连接神经网络 激活函数 tanh 身份证问题新模型的代码实现 模型的优化 一.身份证问题 身份证号码是18位的数字[此处暂不考虑字母的情况],身份证倒数第 ...

  7. TensorFlow之DNN(一):构建“裸机版”全连接神经网络

    博客断更了一周,干啥去了?想做个聊天机器人出来,去看教程了,然后大受打击,哭着回来补TensorFlow和自然语言处理的基础了.本来如意算盘打得挺响,作为一个初学者,直接看项目(不是指MINIST手写 ...

  8. Python3 卷积神经网络卷积层,池化层,全连接层前馈实现

    # -*- coding: utf-8 -*- """ Created on Sun Mar 4 09:21:41 2018 @author: markli " ...

  9. 全连接BP神经网络

    前馈神经网络 前馈神经网络(feedforward neural network)是最朴素的神经网络,通常我们所说的前馈神经网络有两种,一种叫反向传播网络(Back propagation Netwo ...

随机推荐

  1. 落入绝地求生的Python神仙,实现绝地求生无后座!

    叙述 绝地求生已经出来那么久了,大家应该都晓得如今的游戏情形很是差 .特别在高端局,神仙满天飞 搞得很多人类玩家很是没有游戏体验! 由于绝地求生的火爆,繁衍出许多外挂流传于各个地方.飞机上.网吧内,各 ...

  2. asp.net路径问题

    -------------初级篇---------------------------------------- 在一般的href中路径的引用问题   ./index.aspx与index.aspx都 ...

  3. 修改ZendStudio新建php文件时的模板

    zendstudio默认的模板不适用,可以自己到Window -- preferences -- php -- code style -- code templates -- code -- samp ...

  4. Python_替换当前目录下文件类型

    ''' 将当前目录的所有扩展名为html的文件重命名为扩展名为htm的文件 方法一 ''' import os file_list=os.listdir('.') for filename in fi ...

  5. DX11 Without DirectX SDK--01 DirectX11初始化

    回到 DirectX11--使用Windows SDK来进行开发 由于个人觉得龙书里面第4章提供的Direct3D 初始化项目封装得比较好,而且DirectX SDK Samples里面的初始化程序过 ...

  6. Unity3D学习(二):使用JSON进行对象数据的存储读取

    前言 前段时间完成了自己的小游戏Konster的制作,今天重新又看了下代码.原先对关卡解锁数据的存储时用了Unity自带的PlayerPref(字典式存储数据). 读取关卡数据的代码: void Aw ...

  7. sqlserver聚合索引(clustered index) / 非聚合索引(nonclustered index)的理解

    1. 什么是聚合索引(clustered index) / 什么是非聚合索引(nonclustered index)? 可以把索引理解为一种特殊的目录.微软的SQL SERVER提供了两种索引:聚集索 ...

  8. 分布式任务系统gearman的python实战

    Gearman是一个用来把工作委派给其他机器.分布式的调用更适合做某项工作的机器.并发的做某项工作在多个调用间做负载均衡.或用来在调用其它语言的函数的系统.Gearman是一个分发任务的程序框架,可以 ...

  9. Java基础小知识1——分别使用字节流和字符流复制文件

    在日常使用计算机过程中经常会涉及文件的复制,今天我们就从Java代码的角度,看看在Java程序中文件复制的过程是如何实现的. 1.使用字节流缓冲区复制文件 示例代码如下: import java.io ...

  10. ETCD相关介绍--整体概念及原理方面

    etcd作为一个受到ZooKeeper与doozer启发而催生的项目,除了拥有与之类似的功能外,更专注于以下四点. 简单:基于HTTP+JSON的API让你用curl就可以轻松使用. 安全:可选SSL ...