当前位置: 首页 > news >正文

CNN:Convolutional Neural Network(下)

目录

1  CNN 学到的是什么

1.1  Convolution 中的参数

1.2  FFN 中的参数

1.3  Output

2  Deep Dream

3  Deep Style

4  More Application

4.1  AlphaGo

4.2  Speech

4.3  Text


原视频:李宏毅 2020:Convolutional Neural Network

本博客属于学习笔记,如有问题请大佬指正~

1  CNN 学到的是什么

我们可能会认为神经网络都是一个黑箱(black box),我们没有办法知道也没有办法解释其中的参数,只能知道训练出来的预测效果可能很好。但实际上,我们可以通过一些间接的方法来了解神经网络都学到了什么。

1.1  Convolution 中的参数

继续用上一篇博客的例子举例。假设我们通过梯度下降和反向传播,已经训练好了该 CNN 中的所有参数。在该 CNN 的第二个 Convolution 模块中,每个过滤器(filter)的输出均为一个 11×11 的矩阵(通道数是 25):

我们用以下符号来表示结果矩阵中的每一个值:

a^{k}_{ij}

其中,k 表示这是第 k 个过滤器(filter)的输出,i 和 j 分别表示该结果所属的行和列。

为了知道这个训练好的 CNN 到底学到的是什么?我们的逻辑是,固定该 CNN 中某个过滤器(filter)的所有参数,寻找一个输入使得它的输出最大。这样我们便能知道哪些图片和该过滤器(filter)最匹配。这和训练模型时的逻辑正好相反。因为在训练模型时,我们是固定模型的输入,通过更新模型中的参数来使模型的输出最大。

“输出最大” 要具体情况具体分析,也可能是使损失函数最小。

因此,可以定义如下公式来衡量过滤器(filter)的激活程度(degree of the activation):

a^k=\sum_{i=1}^{11}\sum_{j=1}^{11}a^{k}_{ij}

我们想要找到这样一个输入:

x^*=arg\, \mathrm{\underset{\textit{x}}{max}}\, a^k\, (\mathrm{gradient\, ascent})

它能使过滤器(filter)的激活程度最大。事实上,根据所定义的公式,就是找一个和过滤器(filter)的点积结果最大的输入。再将这个输入以图片的形式表示出来:

这是李宏毅老师截取的前 12 个结果(我们所寻找的输入),它分别对应了 12 个过滤器(filter)所代表和寻找的样式(pattern)。这是因为向量点积结果越大表示两个向量越相似,所以通过观察这些寻找到的输入,我们能间接知道过滤器(filter)所代表和寻找的是哪一种图片样式(pattern)。

比如,第 7 个结果代表了第 7 个过滤器(filter)的工作是寻找图片中的斜纹样式(pattern),这就是该 CNN 的学习成果。

1.2  FFN 中的参数

根据 1.1 节中的逻辑,我们同样可以固定 FFN 中某个神经元的所有参数,通过使该神经元加权和最大来寻找适配该神经元的图片:

我们定义某神经元中的加权和为:

a_j

想要找到这样一个输入:

x^*=arg\, \mathrm{\underset{\textit{x}}{max}}\, a_j

它能使该神经元的加权和最大。结果如下:

每一张小图均对应了某一个神经元所适配的图片。

1.3  Output

甚至我们还能控制输出层(output layer)的参数,了解该 CNN 眼中的结果长啥样。

假设这里模型处理的是一个数字辨识的分类问题,输出层(output layer)的结果表明输入的图片属于 0-9 这 10 个数字中的哪一个。

现在我们有一个训练好了的 CNN 模型,来看看它眼中的数字长啥样。我们定义输出层中某一神经元的加权和为:

y_j 

它代表的是输入的图片属于哪一个数字。想要找到这样一个输入:

x^*=arg\, \mathrm{\underset{\textit{x}}{max}}\, y_j 

由于找到的这张图片在某一数字类别得到了最高分,因此可以认为它就代表了模型眼中某某数字的样子。结果如下:

由此可见,模型学习到的知识和我们人类学习到的知识天差地别。但是,我们也可以添加一些约束,类似于先验知识,来告诉模型什么样的东西才是数字。比如,在一个数字图片中,数字只会占据部分区域。因此,添加约束:

x^*=arg\, \mathrm{\underset{\textit{x}}{max}}\, \left (y_j-\sum_{i,j}^{}\left | x_{ij}\right | \right )

其中,x_ij 表示图片中第 i 行第 j 列的像素值(由于是黑白图片,所以只会取值 0 或 1)。公式表明,x_ij=1 是一个扣分项。也就是说,我们希望模型用尽量少的黑或白像素点来表示一个数字,从而实现了 “数字只会占据部分区域” 的约束。结果如右图所示:

添加约束后,我们似乎能看出一些数字的轮廓了。当然添加的约束可以不仅限于这一种,还可以要求同色像素点之间要连续等。

2  Deep Dream

后面的内容主要是李宏毅老师讲的一些 CNN 的玩法。

比如这里扔一张原始图片进 CNN,将正的参数设置得更正,负的参数设置得更负,最后再生成一张修改后的图片:

这一节没太听懂,如有错误请指正!

3  Deep Style

第一个 CNN 用于提取图片的内容,它关注的是过滤器(filter)的卷积结果;第二个 CNN 用于提取图片的画风,它关注的是过滤器(filter)之间的相互关系(correlation):

要求第三个 CNN 既匹配第一个 CNN 的过滤器(filter)卷积结果,又要匹配第二个 CNN 的过滤器(filter)之间的相互关系(correlation),最后通过反推生成一张新的图片。

4  More Application

与其说是介绍 CNN 的应用领域,不如说是李宏毅老师告诫我们不要照搬 CNN,而要根据实际场景进行取舍。

4.1  AlphaGo

比如在围棋领域,我们就不能使用 CNN 的 ③ 号功能,即采样原始图片像素的子集以获得更小的图片。因为棋盘中每行每列的棋子都可能参与到一个棋局的形成,擅自去除一些行和列会影响到整盘棋。所以 AlphaGo 中没有使用 Max Pooling 模块:

4.2  Speech

在语音识别中,频谱(spectrogram)也能用 CNN 进行处理。在频谱(spectrogram)中,横轴是时间,纵轴是声音的频率,颜色是声音的能量:

这是李宏毅老师说 “你好” 的频谱,我们只会截取一段频谱(spectrogram)作为 CNN 的输入,即浅色蓝框中的部分。这是因为每个字只会持续一段时间,我们不需要关注整个时间上的频谱。

在处理这一段频谱(spectrogram)时,过滤器(filter)(深色蓝框)只会沿着频率(frequency)的方向移动。这样做的原因有两个:

① 过滤器(filter)沿着时间(time)移动没有太大的帮助。因为在实际应用中,CNN 后面往往会接 LSTM 等模型,这些模型能够提取时间(temporal)信息,所以没有必要再让 CNN 去提取时间(temporal)信息。

② CNN 中过滤器(filter)的本质就是捕捉图片中的一些样式(pattern),虽然男生和女生说 “你好” 的频谱可能长得非常不同,但是在频率方向上存在相同的样式(pattern)。因此,让过滤器(filter)沿着频率(frequency)方向移动很有帮助。

4.3  Text

同样地,在 NLP 领域,过滤器(filter)也只会顺着句子进行移动,而不会把词嵌入(word embedding)截断,进行一个左右横跳:

我猜,Speech 和 Text 的例子都属于是一维卷积,即过滤器(filter)只沿着一个方向进行移动,也就是我们常常在论文中看到的 Conv1D 。

相关文章:

CNN:Convolutional Neural Network(下)

目录 1 CNN 学到的是什么 1.1 Convolution 中的参数 1.2 FFN 中的参数 1.3 Output 2 Deep Dream 3 Deep Style 4 More Application 4.1 AlphaGo 4.2 Speech 4.3 Text 原视频:李宏毅 2020:Convolutional Neural Network 本博客属于学…...

FPGA时序分析与时序约束(四)——时序例外约束

目录 一、时序例外约束 1.1 为什么需要时序例外约束 1.2 时序例外约束分类 二、多周期约束 2.1 多周期约束语法 2.2 同频同相时钟的多周期约束 2.3 同频异相时钟的多周期约束 2.4 慢时钟域到快时钟域的多周期约束 2.5 快时钟域到慢时钟域的多周期约束 三、虚假路径约…...

无需任何三方库,在 Next.js 项目在线预览 PDF 文件

前言: 之前在使用Vue和其它框架的时候,预览 PDF 都是使用的 PDFObject 这个库,步骤是:下载依赖,然后手动封装一个 PDF 预览组件,这个组件接收本地或在线的pdf地址,然后在页面中使用组件的车时候…...

排序问题——晴问题库

排序问题——晴问题库 排序问题是线性数据的常考问题,在解晴问题库时总结归纳以下关于排序的解题方法和思路。 感谢晴神 排序问题是数据结构中十分重点的一部分。 可以分为五个大部分: 插入排序选择排序交换排序基数归并 再具体往下分: 插…...

【LabVIEW FPGA入门】FPGA中的数学运算

数值控件选板上的大部分数学函数都支持整数或定点数据类型,但是需要请注意,避免使用乘法、除法、倒数、平方根等函数,此类函数比较占用FPGA资源,且如果使用的是定点数据或单精度浮点数据仅适用于FPGA终端。 1.整数运算 支持的数…...

华为设备VRRP配置

核心代码: 需要对所有虚拟路由器设置(要进入到对应的端口) vrrp vrid 38 virtual-ip 192.168.10.254 vrrp vrid 38 priority 120 vrrp vrid 38 track int g0/0/1 reduced 30①mac由vrid生成 ②指定虚拟ip ③虚拟ip作为内部主机的网关&#x…...

2024年艺术发展与文化产业国际会议(ICADCI 2024)

2024年艺术发展与文化产业国际会议(ICADCI 2024) 2024 International Conference on Art Development and Cultural Industry(ICADCI 2024) 数据库:EI,CPCI,CNKI,Google Scholar等 一、【会议简介】 2024年艺术发展与文化产业国际会议(ICADCI 2024)将于丽江这座美丽…...

华为手表开发:WATCH 3 Pro(10)获取心率_java 华为手表获取心跳

华为手表开发:WATCH 3 Pro(10)获取心率_java 华为手表获取心跳 Excerpt 文章浏览阅读1.2k次。鸿蒙开发,获取手表心跳,按钮点击后触发的方法,我们将跳转页面的代码写在这个位置就可以实现点击按钮进行跳转页面的动作。在HTML文件“index.hml”,添加按钮,这里按钮用到是标…...

使用企业订货软件的担忧与考虑|网上APP订货系统

使用企业订货软件的担忧与考虑|网上APP订货系统 网上订货系统担心出现的问题 1,如果在订货系统中定错(多)货物了该怎么办 其实这也是很多人在网购或者是现实中经常会犯的一个错误,但是网上订货平台为大家提供了很多的解决方案,其中对于订单的…...

Java-集合-Collection类

1 需求 2 接口 Interface Collection<E> public interface Collection<E> extends Iterable<E> 2.3 Method Detail int size()boolean isEmpty()boolean contains(Object o)Iterator<E> iterator()Object[] toArray()<T> T[] toArray(T[] a)…...

Linux:/proc/kmsg 与 /proc/sys/kernel/printk_xxx

目录 前言一、/proc/kmsg1、简介2、如何修改内核日志缓冲区3、dmesgklogctl 函数&#xff08;来源于 man 手册&#xff09; 4、扩展阅读 二、 /proc/sys/kernel/printk_xxx三、/dev/kmsg 前言 本篇文章将为大家介绍与 Linux 内核日志相关的一些控制文件&#xff0c;共同学习&am…...

使用 Postman 发送 get 请求的简易教程

在API开发与测试的场景中&#xff0c;Postman 是一种普遍应用的工具&#xff0c;它极大地简化了发送和接收HTTP请求的流程。要发出GET请求&#xff0c;用户只需设定正确的参数并点击发送即可。 如何使用 Postman 发送一个GET请求 创建一个新请求并将类型设为 GET 首先&#…...

【网站项目】基于jsp的拍卖网站设计与实现

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…...

为什么洗衣机会每天自动上传3.6GB数据?

“为什么我家的LG洗衣机每天都会上传3.6GB的数据&#xff1f;” 一位名为Johnie用户发现他家电设备的异常行为后表示很不理解&#xff0c;随后他把相关信息发布在X平台&#xff0c;很快这篇帖子就收获了超过1700万次的浏览量&#xff0c;并迅速变成一场争议和网络安全battle。…...

word写标书的疑难杂症总结

最近在解决方案工作&#xff0c;与office工具经常打交道&#xff0c;各种问题&#xff0c;在此最下记录&#xff1a; 1.word中文档距离文档顶端有距离调整不了 1.疑难杂症问题1&#xff0c;多个空格都是不能解决 #解决办法&#xff1a;word中--布局-下拉框---“版式”--“垂直…...

2024,会更好嘛?

2023转眼过去&#xff0c;从1月的前端&#xff0c;2月的java&#xff0c;3月的数据库&#xff0c;4月的运维&#xff0c;我尝试了许多技术方向&#xff0c;终究在2023年5月&#xff0c;凭着背的Java面试题&#xff0c;拿到了三四个offer。2023年6月&#xff0c;边玩边整自己的毕…...

Nsis打包Unity Exe文件(通用)

Nsi 脚本 !include "MUI2.nsh"#使用现代UI Unicode true #使用Unicode !define EXENAME "exeName" #定义常量 exe名称 !define SHORTCUT "快捷方式名称" #定义桌面快捷方式的中文名称Name ${EXENAME} #安装程序的title OutFile "${EXENAME…...

【Azure 架构师学习笔记】- Azure Databricks (6) - 配置Unity Catalog

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (5) - Unity Catalog 简介 UC的关键特性 之所以DataBricks要用UC&#xff0c; 很大程度是对安全的管控。从上文可以了解到它的四大特性&#…...

redis7部署集群:包含主从模式、哨兵模式、Cluster集群模式等三种模式

前言&#xff1a; redis部署集群常见的一般有三种模式&#xff1a;主从模式&#xff0c;Sentinel&#xff08;哨兵模式&#xff09;&#xff0c;Redis Cluster&#xff08;高可用Cluster集群&#xff09;&#xff0c;根据不同的需求可自定义选择部署方式。 Redis 主从模式&…...

072:vue+mapbox 点击某图层feature,高亮这部分

第072个 点击查看专栏目录 本示例是介绍如何在vue+mapbox中点击某图层feature,高亮这部分。思路是通过点击,获取点击部分的feature信息,生成一个新的source和layer,如果这个图层不为空,则清除之,相当于点击了别的地方,原有的高亮会删除掉,在别的地方高亮。 直接复制下…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者&#xff1a;吴岐诗&#xff0c;杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言&#xff1a;融合数据湖与数仓的创新之路 在数字金融时代&#xff0c;数据已成为金融机构的核心竞争力。杭银消费金…...

【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)

LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 题目描述解题思路Java代码 题目描述 题目链接&#xff1a;LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中&#xff0c;明确沟通敏捷转型目的尤为关键&#xff0c;团队成员只有清晰理解转型背后的原因和利益&#xff0c;才能降低对变化的…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器

一、原理介绍 传统滑模观测器采用如下结构&#xff1a; 传统SMO中LPF会带来相位延迟和幅值衰减&#xff0c;并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF)&#xff0c;可以去除高次谐波&#xff0c;并且不用相位补偿就可以获得一个误差较小的转子位…...