知乎 有一个 问题 《如何通俗易懂地解释卷积?》 https://www.zhihu.com/question/22298352 。
在 这个 问题 里, 网友们 回答 的 很精彩 、淋漓尽致, 生动活泼具体, 但 从头到尾, 就是没有说, 为什么要 “反转” ?
卷积 的 表达式 : ʃ f ( τ ) g ( x - τ ) dτ ,
卷积, 是 要 构造 一个 和 x 相关 的 τ 的 区间, 反转 的 意义 也在 这里 。 这是 玩法一 。
还有 玩法二, 卷积, 是 要 构造 一个 和 x 相关 的 x - τ 的 区间 。
如果 把 x - τ 改成 τ - x , 那么 就 不是 反转, 而是 平移, 平移 的 位移 为 x 。
在 《如何通俗易懂地解释卷积?》 问题 中, 有 网友 举了 图像降噪 的 例子, 具体 就是 寻找 位图 里 的 噪点 。
我可以写 一段 简单 的 程序 来 实现 寻找 位图 里 的 噪点, 代码 是 伪码, 主要 描述 逻辑 。
代码 ********
var a = 位图矩阵(元素 是 像素点)
var 噪点Array // 这是一个 数组, 用于 保存 噪点
遍历 a
{
var p1 = a 的 当前遍历 的 元素(像素点)
var 结果 = 0
遍历 a 中 p1 附近 像素点
{
var p2 = 当前遍历 的 像素点
var 反差 = p1 和 p2 在 色彩 、亮度 等 方面 的 反差
var 权重 = p1 和 p2 的 距离 决定 权重, 距离近 则 权重大, 距离远 则 权重小
var 本次结果 = 反差 * 权重
结果 += 本次结果
}
结果 越大, 则 p1 是 噪点 的 可能性 越大
如果 是 噪点, 把 p1 保存到 噪点Array
}
最终 噪点Array 里 存放的 就是 检查到的 噪点
代码 完 ********
这段 代码 不难, 理解了 意图 的 话, 初中生 可以写 。 嗯 ? 这需要 卷积 ?
声音 的 去噪 大概 也是 这个 原理 吧 ? 当然, 要 定义出 一个 信号点 对于 一段信号 怎样算是 噪点 的 规则 。
所以, 可以看出, 卷积 和 直积 类似, 是 对 元素 的 排列组合匹配 , 区别是, 卷积 是 “靶向性的直积”, 简称 靶向直积 。
直积 的 定义 是, 设 有 2 个 矩阵 a 、b, a * b 的 直积 是 a 的 每一个元素 和 b 的 所有元素 相乘, 基本上, 这也是 笛卡尔积 。
而 卷积 是 a 的 每一个元素 和 b 里 的 一部分 元素 相乘, “b 里 的 一部分 元素” 这个 “一部分” 的 范围 和 a 的 元素 相关, 由 a 的 元素 决定 。
卷积 有一点 “反转” 的 意思, 从 这一点 来看, 类似 程序 的 递归, 当然, 这只是一个 类比 。
但这样类比的话, 直积 = 循环 套 循环, 卷积 = 循环 套 递归, 啊这 ?
结论 : 卷积 毫无用处, 直积 走遍天下, 笛卡儿积 无所不能 。