跳转至

所有文章

神经网络中的激活函数

激活函数在神经元中是非常重要的。为了增强网络的表示能力和学习能力,激活函数需要具备以下几点性质:

  1. 连续并可导(允许少数点上不可导)的 非线性函数 (若激活函数仍是线性函数,那么再多层的神经网络都只能拟合一个线性函数)。可导的激活函数可以直接利用数值优化的方法来学习网络参数。
  2. 激活函数及其导函数要尽可能的简单,有利于提高网络计算效率。
  3. 激活函数的导函数的值域要在一个合适的区间内,不能太大也不能太小,否则会影响训练的效率和稳定性。

本文总结了神经网络中常见的激活函数。

activation_functions

极大似然估计与最小均方误差的等价性

在使用最小二乘法估计线性模型的参数时,我们通常会将目标函数写成最小化均方误差的形式: $$ \hat\beta = \min_{\beta} \sum_{i=1}^n {\color{red}{(y_i - x_i^T \beta)^2}} $$

为什么我们要用 均方误差 作为损失函数?而不是绝对值误差、绝对值的三次方误差等其他形式?本文推导了极大似然估计与最小均方误差的等价性,说明最小均方误差是一种合理的做法。

单纯形法求解线性规划问题

线性规划的一般形式

在线性约束条件下,寻找目标函数 \(z\) 的最大值:

\[ \max \ z = x_1 + x_2 \]
\[ s.t \begin{cases} 2x_1 + x_2 \leq 12 \\ x_1 + 2x_2 \leq 9 \\ x_1, x_2 \geq 0 \end{cases} \]

线性规划的可行域

满足线性规划问题约束条件的所有点组成的集合就是线性规划的可行域。若可行域有界(以下主要考虑有界可行域),线性规划问题的目标函数最优解必然在可行域的顶点上达到最优。

单纯形法就是通过设置不同的基向量,经过矩阵的线性变换,求得基可行解(可行域顶点),并判断该解是否最优,否则继续设置另一组基向量,重复执行以上步骤,直到找到最优解。所以,单纯形法的求解过程是一个循环迭代的过程。

kexingyu

图 1 可行域

保持专注

回顾过去一个多月的学习和求职,我感到自己过得并不够专注。课业的强度、求职的不顺利,让我总是感觉有很多事情需要做,但又有很多事情没做好。对我来说,这不是一个好的状态,我需要付出行动改变它。

以下几点是我做出的改变,希望自己能长期坚持它们:

  1. 不拖延。 写在任务清单上的事项,一有时间就应该立即完成。在截止日期之前将任务打上勾,我会很享受这种成就感。

  2. 保持充足的睡眠。 这段时间我有时睡得很晚,投简历、刷算法题、整理面试经验、复习课业内容等等,让我感觉有很多事情要做。我通常到了 12 点之后才睡觉,超出的这段时间就好像是我捡来的一样,但这实际上影响了我第二天的睡眠。少做几道笔试题并不会怎么样,知识储备要靠长期的积累,而不是靠几个晚上就能快速提高的。是应该做些改变了:以饱满的精神迎接第二天的工作,工作效率的提高更像是我捡来了更多的时间。

  3. 珍惜让自己感到舒服的人和事。 求职无非就是加入一群人并和他们一起做一些事。能加入一个让自己感到舒服的团队、做让自己感到舒服的事情,是一件幸运的事,要珍惜。

春天已经到来,愿自己保持专注,重新出发!

flower-with-three-colors

这棵树开着三种不同颜色的花,据说是用嫁接技术实现的。

LeetCode 背包问题

本文是我学习背包问题的一些总结。

算法题算是我求职路上的一道坎,我没有数据结构与算法的学习经验,但许多笔试都需要考算法题。我花了两天时间系统学习动态规划中的背包问题,希望能让自己再次遇到这类问题时不再畏惧。之前以为只有计算机系同学才能做出的题目,我也能自己做出来了,这就是学习的收获。

背包问题是指有一个固定容量为c的背包,以及一组物品,每个物品都有自己的重量w[i]和价值p[i]。在不超过背包容量的前提下,选择不同的物品装入背包,使得装入背包中的物品总价值最大。

big-picture

从零开始搭建卷积神经网络组件

本文是深度学习课程的一次练习,使用 Numpy 实现了 CNN 中卷积层、池化层的前向传播与反向传播。

以下是一个典型卷积层的计算过程:

  • 输入张量:\(X \in \mathbb{R}^{M \times N \times D}\)。例:\(D=1\) 时,输入的是 \(M \times N\) 维的灰度图像; \(D=3\) 时,输入的是 \(M \times N\) 维的彩色图像。
  • 卷积核:\(W \in \mathbb{R}^{U \times V \times D \times P}\),其中每个切片矩阵 \(W^{d, p} \in \mathbb{R}^{U \times V}\), \(1 \leq d \leq D, 1 \leq p \leq P\)
  • 输出张量: \(Y \times \mathbb{R}^{M^{\prime} \times N^{\prime} \times P}\)

conv_single_step

稀疏高维协方差矩阵的 Thresholding 估计方法

高维协方差矩阵的一个重要特征就是许多维度之间的协方差非常接近于 0,一个自然的想法就是将矩阵中绝对值太小的元素设为 0,这种方法就是 Thresholding(门限):通过设定某个门限,将绝对值小于该门限的元素设为 0,只保留绝对值大于或等于该门限的元素。

通过 Thresholding 估计方法,我们可以得到一个比样本协方差矩阵更稀疏的估计。学术界提出了两种设置 Thresholding 的方法:Universal thresholding(统一截断)和 Adaptive thresholding(自适应截断)。前者对矩阵中的每一个元素均采用相同的门限标准,而后者基于样本协方差估计的标准误自适应地为每个元素设定门槛。

本文使用模拟的高斯分布数据和真实的高维 DNA 基因数据,比较了 Universal thresholding 和 Adaptive thresholding 的估计效果,所得结果与 Tony Cai & Weidong Liu (2011) 中的结果基本一致。

png

手动实现交叉验证的收获

在实现交叉验证时,要清楚一共有几个循环。每一个候选的超参数,都要在所有折上做训练和验证!

例如,一共有 10 个候选的超参数,进行 5 折交叉验证,那么需要对这 10 个超参数都训练、验证 5 次,一共训练、验证 50 次。

在编码的过程中,我最开始误将一个参数在一个折上做训练和验证,这样做并不能达到交叉验证的效果。