“矩阵求导”

分母布局

矩阵求导(Matrix Derivative)也称作矩阵微分(Matrix Differential),在机器学习、图像处理、最优化等领域的公式推导中经常用到。矩阵求导实际上是多元变量的微积分问题,只是应用在矩阵空间上而已,即为标量求导的一个推广,他的定义为将自变量中的每一个数与因变量中的每一个数求导。 具体地,假设存在 A_{m \times n} B_{p \times q} ,则 \frac{\partial A}{\partial B} 会将 A 中的每一个值对 B 中的每一个值求导,最后一共会得到 m \times n \times p \times q 个导数值。这么多的导数值,最后是排布成一个 m \times (n \times p \times q) 的矩阵…

“图片水印果然还是不适合我”

可能有观众已经发现了(虽然我觉得这个博客没有其他人关注),Soptlog (也就是你正在看的这个博客) 在上一个版本中所有文章中的图片左下角都有一个水印。而在这个版本所有的水印又都被去除了。起初加水印的动机很简单,一是为了测试一下 Ruby 调用 Nodejs 的能力,二是我发现有个博客在复制粘贴我的内容,还没有申明来源,所以就想用水印的方式来「显示主权」。现在看来还是不适合我。 实现方式 考虑到以后可能有小伙伴想要实现相似的功能,我还是简单简述…

“最近我在玩什么”

由于疫情的原因,这几个月虽然都是在家里上的课,但却感觉丝毫没有轻松下来。归根结底还是玩的太多了,于是反正技术向也没什么可写的,就写写我在玩些什么吧。 游戏 游戏的话说实话我这段时间玩的不多,原因是因为也没什么好玩的。马上次世代主机也要来了,索尼目前来看好像准备不是很充分的样子。从次世代主机的角度来说,好像被微软杀了个下马威嗷,现在都还没有公布外观细节,硬件方面给我的体会也只有 「 SSD 很快 」。另一方面,从这段…

“简易自动求导机”

利用二叉树实现简单的自动求导

很久很久以前,当计算机还不普及的时候,对一个复杂函数的求导一定是众多学者的噩梦之一。试想,也许面对一个三元多项式函数时,你还可以游刃有余地对每一个变量求导数,但当函数被拓展到成千上万元、成千上万项的时候,你还有信心求的出来导吗?于是,随着计算机的普及,自动求导算法的提出帮助众多学者从大型函数的求导中解放了出来。 深度学习的反向传播也是一个典型的自动求导过程,而作为 pytorch 魔法力量的核心 Autograd,一定也被很多人好奇…

“调度场算法”

Shunting Yard Algorithm

调度场算法可以把一个中缀表达式转换为后缀表达式,后缀表达式可以很轻松的被转换为二叉表达树。 中缀表示法(或中缀记法)是一个通用的 算术 或 逻辑 公式表示方法, 操作符 是以中缀形式处于 操作数 的中间(例:3 + 4)。与 前缀表达式 (例:+ 3 4 )或 后缀表达式 (例:3 4 + )相比,中缀表达式不容易被 电脑 解析,但仍被许多 程序语言 使用,因为它符合人们的普遍用法。 ——维基百科 算法 文字版 当还有记号可以读取时: 读取一个记号。 如果这个记号表…

“从零开始实现自己的 Jekyll 插件:Filter”

自定义 Filter 插件

Filter 插件是什么? Filters 插件是 Jekyll 插件中最为常见的一种类型,它可以将一种 Ruby 的内部方法暴露给 Liquid ,最后在页面调用。比如说,如果有阅读使用 Jekyll 搭建的静态网页的话,我们可能会注意到很多形如下面的内容: 这就是 Liquid 语言,第一行和第二行使用 `` 包着的是运算式,而第三行使用 {{ }} 包着的表示将抱着的变量输出。Liquid 是一种很简单的模版语言,半天就可以学完,对 Liquid 有更多兴趣的可以去这个网站查看一下官方的文档。 所以说了这么多,Filter 到底是什么呢?其实在…

“CinemachineConfiner 组件源码解读以及优化”

主要优化 2D 边界约束时若摄像头大小大于边界大小时的行为

Cinemachine 无疑是 Unity 中最好用的一个插件之一,其提供的许多选项可以帮助开发者在不写一行代码的情况下实现非常优质的镜头效果。CinemachineConfiner 作为 Cinemachine 的一个插件,可以允许开发者使用一个边界来限制摄像机的位置。而在 2D 模式下使用正交摄像头时,CinemachineConfiner 更可以直接限制摄像机视角的范围,非常有用。但问题就来了,Unity 技术人员在编写 CinemachineConfiner 时可能没有考虑到摄像机的视角大于边界的情况,所以在这种情况下视角的约束行为变得非常迷惑。于是接下来的文章我讲先解读一下 2D 模式…

“Unity 音频中断问题解决”

Default audio device was changed, but the audio system failed to initialize it. Attempting to reset sound system.

问题复现 之前一直使用耳机的时候音频输出都没有问题,直到有一次想玩 PS4,把耳机拔下来之后出现了这个问题。反复试验,在 Audio Source 正常播放的时候改变系统的默认输出就会引发这个问题。 现状与理想状态 现状是更改了系统默认输出后,当前 Audio Source 会被重置。 理想状态是更改了系统默认输出后,Audio Source 重新选择输出接口,然后继续在新的输出接口播放音频。 解决方案 随意去谷歌百度搜了一下,没有搜到相关的解决方法,只有自己研究了。一开始我以为整个 Audio Source 都…

“迁移博客到 ZEIT NOW”

用了快两年 Github Pages了,不能说个方面都非常满意,但至少大部分方面都还好。中间其实也想找过其他的托管代理商,但都因为各种各样的原因就觉得不行。总结一下 Github Pages 主要有这样的缺点: CDN 国内时常抽风。虽然明面上 Github 是被解禁了的,但实际上 Github 的服务器在中国的访问速度非常不令人满意。平均下来延迟在 400ms 左右。 百度搜索无法收录。因为某些原因,百度搜索的爬虫被 Github 屏蔽了,导致百度无法收录任何托管在 Github 服务器上的网页。 无法使用 Jekyll 插件。我…

“MacOS 下的代码行数统计”

Count Lines Of Code

cloc ( Count Lines Of Code ) 是一个 Perl 脚本,可以统计空白行,注释行, 并且支持很多语言。他有如下优势: 执行文件经过打包压缩,可以很轻易的被安装。 可以读取注释,并且可以识别计算机中没有安装的语言写的代码。 可以对多个文件的结果进行汇总。 可以输出结果为多种格式,包括:纯文本,SQL, JSON, XML, YAML 等。 可以统计压缩文件中的代码行数,例如 tar, zip, ear 文件。 有很多故障排除选项。 可以支持不常见字符。 纯 Perl 编写,不引用其他库。 跨平台。 下载与安装 使用 Homebrew 安装…