刚刚过去了10月最后完整的一周,马上就要扑向11月的怀抱了。很开心能够在每周总结自己的所学所得,整理为博客,这样也是一种让人充满了成就感的事情。在上一周我开始学着逐渐运用之前提到的多线程学习法进行知识的扩充,收到了不错的效益,一方面工程能力在实际项目的锻炼中不断提升,另一方面也接触到了许多偏学术的知识和规则。当然啦,对于Andrew大佬视频课的学习,也一直被我放在较为重要的地位,尽量挤出时间来进行学习。继续加油,小IG决赛冲鸭!
不登高山,不知天之高也;不临深溪,不知地之厚也。
在Python爸爸的数据科学库NumPy中,有一个非常有趣的概念:广播(broadcast)。那什么叫广播呢?举个栗子,当计算1+1时,我们可以很轻松的给出实数2这个答案,但如果要计算数组[1,1,1]+1呢?当进行这样的计算时,NumPy会帮助我们对实数1进行两次的复制而得到一个行向量[1,1,1],因此,上述表达式的结果即为[2,2,2]。这样的计算方法在进行神经网络的编写能够发挥很大的作用,简化了计算过程。
一般的,对于加减乘除的基本运算,Numpy都将会对实数或矩阵进行转换,从而得到方便计算的目的:
需要注意的是,有时也许我们需要对矩阵(向量)进行变换,这时我们可以用到np.reshape方法进行变换,其底层算法时间复杂度仅为O(1)级别,使用起来相当方便。
在这里,我想特地记录一下最大似然估计的概念以及具体数学公式,因为其在机器学习、深度学习领域对于模型参数的求解占据着相当重要的地位。最大似然估计(Maximum Likelihood Estimation)提供了一种给定观察数据来评估模型参数的方法,即对于模型给定、但参数未知的情况下结合采集的部分样本来估计模型参数的统计方法。举个栗子,比如我们想统计全国程序猿的工资情况,虽然我们可以得到一部分的采集样本(嗯,除非程序猿们乐意share自己的薪水),但我们并没有能力统计到每一个程序猿的工资。在假设全国程序猿工资服从正态分布条件且均值和方差未知的情况下,我们可以通过搜集到部分样本情况通过公式推导来对其均值和方差进行估计。需要注意的是,我们需要假设采样是独立同分布的,这是最大似然估计中最重要的假设。具体对最大似然估计进行描述:
假设x1,x2,…,xn为独立同分布的采样样本,θ为模型参数,f为我们所使用的统计模型,遵循独立同分布假设。参数为θ的模型f产生上述采样可表示为:
f ( x 1 , x 2 , . . . , x n ∣ θ ) = f ( x 1 ∣ θ ) ∗ f ( x 2 ∣ θ ) ∗ . . . ∗ f ( x n ∣ θ ) f(x_1,x_2,...,x_n|θ)=f(x_1|θ)*f(x_2|θ)*...*f(x_n|θ) f(x1,x2,...,xn∣θ)=f(x1∣θ)∗f(x2∣θ)∗...∗f(xn∣θ)
似然定义为:
L ( θ ∣ x 1 , x 2 , . . . , x n ) = f ( x 1 , x 2 , . . . , x n ∣ θ ) = ∏ i = 1 n f ( x i ∣ θ ) L(θ|x_1,x_2,...,x_n)=f(x_1,x_2,...,x_n|θ)=\quad \prod_{i=1}^nf(x_i|θ) L(θ∣x1,x2,...,xn)=f(x1,x2,...,xn∣θ)=i=1∏nf(xi∣θ)
对两边同时取对数,可得到:
l n L ( θ ∣ x 1 , x 2 , . . . , x n ) = ∑ i = 1 n l n f ( x i ∣ θ ) lnL(θ|x_1,x_2,...,x_n)=\quad \sum_{i=1}^nlnf(x_i|θ) lnL(θ∣x1,x2,...,xn)=i=1∑nlnf(xi∣θ)
上式左边称为对数似然,那么平均对数似然为:
l ^ = 1 n l n L \hat{l}=\frac{1}nlnL l^=n1lnL
基于以上推导,那我们所称最大似然表达式如下:
θ ^ m l e = a r g m a x l ^ ( θ ∣ x 1 , x 2 , . . . , x n ) ( θ ∈ Θ ) \hat{θ}_{mle}=argmax\hat{l}(θ|x_1,x_2,...,x_n)_{(θ\in\Theta)} θ^mle=argmaxl^(θ∣x1,x2,...,xn)(θ∈Θ)
通过以上推导,我们就得到了最大似然估计的具体表述方法。最后一点需要注意的是,最大似然估计只考虑某个模型能产生某个给定观察序列的概率,但是没有考虑到该模型本身的概率。
好了,度过了公式推导的艰辛时刻,现在来看一些相对轻松的内容。什么是神经网络?神经网络的结构是什么样的?神经网络的计算过程如何?可以用下面这张图作一个大概的了解:
对于输入向量,我们通过每一个sigmoid过程进行从左向右的计算,最后得到计算出的结果并可以得到损失函数。但这样还没完,我们还需要进行从右到左的计算,即反向传播过程,来调节函数参数以达到最小化的损失函数,使结果更加精确可信。举个双层神经网络的例子:
输入层Input Layer、隐藏层Hidden Layer、输出层Output Layer组成了神经网络的基本结构,在这个例子中,我们对输入向量进行两次logistic回归计算,最后得到计算结果。具体计算过程后续会有详细解释。
本周对上次会议上学长讲到的论文Forecasting on Trading: A Parameter Adaptive Framework Based on Q-learning进行了再阅读和分析,了解到了许多人工智能技术在金融领域的应用方法,对当前金融大数据现状有了一个初步的认识。继续对知乎DQN专栏进行了学习,目前已进行到第4章动态规划与Q-Learning,发现有许多复杂的数学公式需要进行推导,看来是时候对概率论以及统计学习方法进行复习了~除此之外,工程项目也在推进中,不过真的是,需要补充很多以前留下的前端知识的黑洞啊。最后,想请问小伙伴们,孩子5岁才开始学Tensorflow晚了吗?知乎er们的答案是:
TF万岁!Caffe万岁!XgBoost万岁!脚…脚本万岁!