0%

By Z.H. Fu
https://fuzihaofzh.github.io/blog/
在微积分里面,反三角函数的求导结果显得很奇怪,下面以反正切函数为例,给出反三角函数的求导技巧。 $$\arctan'x=\frac{d \arctan x}{dx}$$ 令$\tan \theta=x$有 $$\frac{d \arctan x}{dx}=\frac{d \theta}{d \tan \theta}=\frac{d \theta}{\frac{\cos^2 \theta+\sin^2 \theta}{\cos^2 \theta}d\theta}=\\ \frac{\cos^2 \theta}{\cos^2 \theta+\sin^2 \theta}=\frac{1}{1+\tan^2 \theta}=\frac{1}{1+x^2}$$ 综上 $$\arctan'x = \frac{1}{1+x^2}$$

By Z.H. Fu
https://fuzihaofzh.github.io/blog/
## 利息增长模型   在上中学学习对数的时候,我们就学到了一个叫做e的东西($e\approx 2.71828$),后来又学了e的定义,($e=\lim \limits_{n\to \infty}(1+\frac{1}{n})^n$),但是始终缺乏一个直观的理解,为什么e要这么定义,为什么到处都会有他的身影。后来在研究一个增长模型的时候,重新研究了下e的定义,找到了几个关于它的直观的理解。   首先研究这么一个模型,你往银行里存钱,假设银行的利息按年结算,银行每年的利息与你在银行存的总额和时间成正比(即利息=现金总量x利率x时间差),设存入金额为1,利率为p,那么第二年,你在银行的金额增加到了$1+p$,第三年,你在银行的钱将有$(1+p)(1+p)$,第$n+1$年将有$(1+p)^n$注意这里的时间差都是以年来计算,假设,我们遇到了一个很有耐心的银行,它愿意每天给你结算利息,我们来计算每一天的资金量,第二天的资金量=$1+\frac{p}{365}$(利息=总金(1)x利率(p)x时间($\frac{1}{365}$)),第365天的资金量为$(1+\frac{p}{365})^{364}$,有没有看到e的雏形?我们再假设银行每秒钟都会算一次利息,一年有n秒,那么,按照之前给出的方法,我们就有年末的总金额=$(1+\frac{p}{n})^n$当n趋于无穷大时,即银行每时每刻都会给你结算利息,即等于$e^p$,也就是说,复利的极限竟然和e有关系! ## 泰勒级数的直观理解   我们换种思路再来思考这个问题,这次我们用利滚利的方式来思考,你的本金在银行放了一年,这些本金产生的利息为设每一时刻的本金为$c(t)=1$,那么在一年中第t时刻我们拥有的利息为: $$p_0(t)=\int_0^t p c(t)dt=\int_0^t p dt = pt$$ 因而一年下来的利息为p。但是事情还没有结束,由这些利息产生的利息还没有被计算,那么利息产生的利息在t时刻应该为: $$p_1(t)=\int_0^t p p_0(t)dt=\int_0^t p^2 dt = \frac{p^2t^2}{2}$$ 同样的道理,利息的利息,也会产生利息,这个利息又等于: $$p_2(t)=\int_0^t p p_1(t)dt=\int_0^t p\frac{p^2t^2}{2} dt = \frac{p^3t^3}{3\times 2}$$ 依次地推,我们有利息的利息的利息产生的利息在t时刻为: $$p_3(t)=\frac{p^4t^4}{4!}$$ 而这种递推是无穷的,我们把这些本金和利息加载一起就是我们最后拥有的资金,总数为: $$\begin{align}S&= 1+p_0+p_1+\cdots+p_n+\cdots \\ &=\frac{p^0}{0!}+\frac{p^1}{1!}+\cdots +\frac{p^n}{n!}+\cdots \\ &=e^p \end{align}$$ 其中,t全部被带换成了1。这正是e的泰勒级数展开。   由此可见,我们通过一种模型导出了e的两种表示方式,那么这两种表示方式有没有什么联系呢?实际上,我们讲e的极限式展开,有: $$\begin{align}e^p&=\lim \limits_{n\to \infty}(1+\frac{p}{n})^n\\&=(1+\frac{p}{n})(1+\frac{p}{n})(1+\frac{p}{n})\cdots\end{align}$$ 我们来观察其中的每一项:
Read more »

By Z.H. Fu
https://fuzihaofzh.github.io/blog/
  组合数是排列组合中最基础的一个公式,本文首先给出组合数公式的一个直观理解,并将其推广为多分组公式。   组合数定义为: $$\binom{n}{k}=\frac{n!}{k!(n-k)!}$$ 一般对这个公式的理解是从$n$个物品中选取$k$个物品的方法数,在这里我们从另一个角度来理解这个公式:将n个物品分为两堆,一堆$k$个,一堆$n-k$个,一个直观的示意图如下图所示 ![组合示意图](/blog/images/combinationUnderstanding.png) 在这里,$n!$表示将$n$个物品一个一个地放入格子中,第一个物品有$n$种选择,第二个物品有$n-1$种选择,以此类推。这样,两堆就分好了,但是要注意到的是,这里的分堆是与顺序无关的,因此要分别除以没一堆的全排列个数,这样就得到了总的分堆方法。   那么自然地,我们可以将上面的概念推广到$m$堆的情况,即求$n$个物品,分入$m$堆中,每一堆的个数分别为$k_1,k_2,\cdots,k_m$,那么总的分类个数有 $$\frac{n!}{k_1!k_2!\cdots k_m!}$$ 示意图如下: ![组合示意图](/blog/images/combinationUnderstanding2.png) 我们仿照组合数的定义,给出多分类的组合数,有: $$\binom{n}{k_1!k_2!\cdots k_m!}=\frac{n!}{k_1!k_2!\cdots k_m!}$$ 类似于二项式系数,这个组合数也叫做多项式系数,可用于表示多项式展开后各项的系数情况,我们讲一个多项式展开,其中每一项的系数就等于多项式系数,有: $$(x_1+x_2+\cdots +x_m)^n=\sum_{k_1+k_2+\cdots k_m=n}\binom{n}{k_1!k_2!\cdots k_m!}x_1^{k_1}x_2^{k_2}\cdots x_m^{k_m}$$ 即是说,$\binom{n}{k_1!k_2!\cdots k_m!}$就是多项式$(x_1+x_2+\cdots +x_m)^n$展开后,$x_1^{k_1} x_2^{k_2}\cdots x_m^{k_m}$那一项的系数。

参考文献

[1] 概率与数理统计 陈希孺

By Z.H. Fu
https://fuzihaofzh.github.io/blog/
  切问录开了一年了,打算换一个正式的域名,折腾了好几天,下面把这个过程记录下来。 ## 一、在Godaddy上购买了新的域名   Godaddy是全球最大的域名代理商,上面的域名还是挺便宜,折合人民币大约50多一年(取决于域名的好坏,好域名可以很贵)。而且客服很不错,买了域名,第二天想重新换一个,给客服网上聊天说一下就好。这里要注意的是,购买域名后需要等一会才会生效。 ## 二、设置DNS解析   进入Godaddy的域名管理界面,设置Nameservers 分别为 F1G1NS1.DNSPOD.NET 和 F1G1NS2.DNSPOD.NET ,点击保存。这里我们选择采用国内的dnspod来提供dns服务,避免国外的dns服务出现连接不上的情况。   接着进入www.dnspod.cn,点击添加域名,我们在这里添加两个DNS域名解析,分别是www.fuzihao.org和fuzihao.org,点击添加记录,在主机记录那一栏填上www,记录类型为CNAME,记录值填写github博客地址www.fuzihao.org。接着再添加第二条记录,与第一条类似,只是主机记录空着不填,这样他会自动变成@,表示为空。至此DNS设置完毕,等待一会即可生效。 ## 三、发布到www.fuzihao.org/blog   我希望把博客放到域名下的一个/blog子目录里面,这和以往的方式略有不同,在这里我们可以采用Project Page的方法来实现。github里面可以设置个人主页和项目主页,之前用的都是个人主页,路径在 账户名.github.io 仓库的master上,这也是唯一一个可以挂在master分支上的主页,对于其它的项目,如果要挂载主页,则需设置在gh-pages分支上。下面我们通过修改配置文件来实现该设置,将配置文件_config.yml相应设置改为如下代码:
1
2
3
4
5
6
7
8
9
url: http://fuzihao.org/blog
root: /blog/

........

deploy:
type: git
repo: https://github.com/maplewizard/blog.git
branch: gh-pages

完成设置后,打开github新建一个名为blog的仓库,并将刚才设置好的内容部署到这上面,即www.fuzihao.org/blog。

Read more »

By Z.H. Fu
https://fuzihaofzh.github.io/blog/

org-mode 入门教程

org-mode是Emacs提供的一个强大的编辑模式,可以用于做会议笔记以及制作各种待办事项(GDT)。其语法类似于Markdown但是提供了比Markdown更多的操作,再加上Emacs强大的编辑功能,能给笔记增加很多动态的操作(能纯文本上实现折叠、展开、树状视图、表格求和、求代码运行结果等功能),可以说org-mode是最强大的标记语言。而org-mode的强大,也导致了他比markdown更加复杂,需要花些时间来练习,本文选出了org-mode最强大、实用的功能,进行最简单的介绍,下面介绍org-mode的使用方法。

![org-mode的logo](/blog/images/org-mode-unicorn-logo.png)

安装

Emacs最新版本(24.4)自带org-mode,这就意味着只要打开一个后缀名为org的文件就会自动进入org-mode。因此我们只需要下载最新版的Emacs即可。
  
windows用户:到http://ftp.gnu.org/gnu/emacs/windows/ 下载最新版
ubuntu系列:在终端中输入:sudo apt-get install emacs

配置

org-mode功能基本比较完善,不需要更多的配置,但是org模式下默认没有自动换行的功能,我们在.emacs文件里面添加如下代码,实现自动换行:

(add-hook 'org-mode-hook (lambda () (setq truncate-lines nil)))

实例教程

以下分别讲解org-mode下几个实用的功能,更完整的教程可以参考官网教程。下面一步一步完成我们的org文件。(本教程中我们定义 C-x 表示按Ctrl+x,M+x标识Alt+x,S+x代表Shift+x,这也是Emacs的标准定义)

新建文件

  1. 打开Emacs
  2. 输入 C-x C-f ~/test/test.org
Read more »

By Z.H. Fu
https://fuzihaofzh.github.io/blog/

我们在之前研究过两个随机变量的独立性,我们定义若两个随机变量X,YX,Y满足

P(X,Y)=P(X)P(Y)P(X,Y)=P(X)P(Y)

则我们说随机变量X,YX,Y独立。下面来直观地理解这个公式,可以发现,如果X,YX,Y独立,那么已知XX,将不会对YY的分布产生任何影响,即是说P(Y)=P(YX)P(Y)=P(Y|X),这个结果的证明也很简单,由贝叶斯公式:

P(YX)=P(X,Y)P(X)=P(X)P(Y)P(X)=P(Y)P(Y|X)=\frac{P(X,Y)}{P(X)}=\frac{P(X)P(Y)}{P(X)}=P(Y)

即证。

由此可以看出,独立性反应了已知XX的情况下,YY的分布是否会改变,或者说,在给定随机变量XX之后,能否为YY带来额外的信息。然而独立性只能表示出两个随机变量之间是否会有关系,但是却不能刻画他们的关系大小。下面我们引入互信息,它不仅能说明两个随机变量之间是否有关系,也能反应他们之间关系的强弱。我们定义互信息I(X,Y)I(X,Y)

I(X;Y)=XYP(X,Y)logP(X,Y)P(X)P(Y)I(X;Y)=\int_X \int_Y P(X,Y)\log\frac{P(X,Y)}{P(X)P(Y)}

我们来稍微理解一下,log里面就是X,YX,Y的联合分布和边际分布的比值,如果对所有X,YX,Y,该值等于1,即是说他们独立的情况下,互信息I(X;Y)=0I(X;Y)=0,即是说这两个随机变量引入其中一个,并不能对另一个带来任何信息,下面我们来稍稍对该式做一个变形

I(X;Y)=XYP(X,Y)logP(X,Y)P(X)P(Y)=XYP(X,Y)logP(X,Y)P(X)XYP(X,Y)logP(Y)=XYP(X)P(YX)logP(YX)YlogP(Y)XP(X,Y)=XP(X)YP(YX)logP(YX)YlogP(Y)P(Y)=XP(X)H(YX=x)+H(Y)=H(Y)H(YX)\begin{aligned} I(X;Y)&=\int_X \int_Y P(X,Y)\log\frac{P(X,Y)}{P(X)P(Y)}\\ &=\int_X \int_Y P(X,Y)\log\frac{P(X,Y)}{P(X)}-\int_X \int_Y P(X,Y)\log{P(Y)}\\ &=\int_X \int_Y P(X)P(Y|X)\log P(Y|X) -\int_Y \log{P(Y)}\int_X P(X,Y)\\ &=\int_X P(X)\int_Y P(Y|X)\log P(Y|X)-\int_Y \log{P(Y)}P(Y)\\ &=-\int_X P(X)H(Y|X=x)+H(Y)\\ &=H(Y)-H(Y|X)\\ \end{aligned}

其中,H(Y)H(Y)YY的熵,定义为

H(Y)=YP(Y)logP(Y)H(Y)=-\int_Y P(Y)\log{P(Y)}

衡量的是YY的不确定度,即使说,YY分布得越离散,H(Y)H(Y)的值越高,而H(YX)H(Y|X)则表示在已知XX的情况下,YY的不确定度,而I(X;Y)I(X;Y)则表示由XX引入而使YY的不确定度减小的量,因而如果X,YX,Y关系越密切,I(X;Y)I(X;Y)越大,I(X;Y)I(X;Y)最大的取值是H(Y)H(Y),也就是说,X,YX,Y完全相关,由于X的引入,YY的熵由原来的H(Y)H(Y)减小了I(X;Y)=H(Y)I(X;Y)=H(Y),变成了0,也就是说如果XX确定,那么YY就完全确定了。而当X,YX,Y独立时,I(X;Y)=0I(X;Y)=0引入XX,并未给YY的确定带来任何好处。

总结下I(X;Y)I(X;Y)的性质:
1)I(X;Y)0I(X;Y)\geqslant 0
2)H(X)H(XY)=I(X;Y)=I(Y;X)=H(Y)H(YX)H(X)-H(X|Y)=I(X;Y)=I(Y;X)=H(Y)-H(Y|X)
3)当X,YX,Y独立时,I(X;Y)=0I(X;Y)=0
4)当X,YX,Y知道一个就能推断另一个时,I(X;Y)=H(X)=H(Y)I(X;Y)=H(X)=H(Y)

By Z.H. Fu
https://fuzihaofzh.github.io/blog/
       ## 为什么需要仿射变换?  

仿射空间与仿射变换在计算机图形学中有着很重要的应用。在线性空间中,我们用矩阵乘向量的方法,可以表示各式各样的线性变换,完成诸多的功能,但是有一种极其常用的变换却不能用线性变换的方式表示,那就是平移,一个图形的平移是非线性的!(这一点只需要看平移前各点与原点的连线和平移后各点与原点之间的连线可知,或者记平移变换为F\mathcal{F},有F(v1+v2)F(v1)+F(v2))\mathcal{F}(\boldsymbol{v_1}+\boldsymbol{v_2})\not =\mathcal{F}(\boldsymbol{v_1})+\mathcal{F}(\boldsymbol{v_2}))

放射空间与仿射组合

为了用数学的方式来描述这种变换,就需要用到仿射变换(平移不是线性变换而是仿射变换)。下面先讲仿射空间。形象地来讲,仿射空间就是没有原点的线性空间。在线性空间中,两个点相加,可以定义为原点到两个点的向量线性相加,而在仿射空间中,由于没有原点,因此不能定义相加,没有线性组合。但我们可以定义一个仿射组合来用若干基表出某个点。我们定义仿射组合:

p=i=1Nλivi(i=1Nλi=1)\boldsymbol{p}=\sum_{i=1}^N \lambda_i \boldsymbol{v_i}\quad\quad(\sum_{i=1}^N \lambda_i=1)

我们不妨在线性空间中来看这个式子,假设就两个向量v1,v2\boldsymbol{v_1,v_2}我们任意指定一个原点q\boldsymbol{q},设v1\boldsymbol{v_1}的系数为λ\lambda,则v2\boldsymbol{v_2}的系数为1λ1-\lambda,那么p=q+λ(v1q)+(1λ)(v2q)=λv1+(1λ)(v2)\boldsymbol{p}=\boldsymbol{q}+\lambda(\boldsymbol{v_1}-\boldsymbol{q})+(1-\lambda)(\boldsymbol{v_2}-\boldsymbol{q})=\lambda \boldsymbol{v_1}+(1-\lambda)(\boldsymbol{v_2})。通过推导,原点q\boldsymbol{q}被消去了,也就是说,仿射组合跟原点的选择没有任何关系!

仿射变换

有了仿射组合,就可以仿照线性组合来定义仿射变换:

给定两个仿射空间A,B\mathcal{A},\mathcal{B},一个函数f:ABf:\mathcal{A}\rightarrow \mathcal{B}是仿射变换,当且仅当对仿射组合

\sum_{i=1}^N \lambda_i \boldsymbol{v_i}\quad\quad(\sum_{i=1}^N \lambda_i=1)$$都有 $$f(\sum_{i=1}^N \lambda_i \boldsymbol{v_i})=\sum_{i=1}^N \lambda_if(\boldsymbol{v_i})\quad\quad(\sum_{i=1}^N \lambda_i=1)

这种系数又叫质心坐标,哪个点的系数大,就相当于质量大,质心就离那个点近。仿射变换得到的结果就是给定点按质量加权的质心,质心的仿射变换等于每个点进行放射变换后再求质心。

用线性变换表示仿射变换

下面来看如何表示仿射变换,我们定义Rn\mathbb{R}^n中一个向量v\boldsymbol{v}的齐次形式为Rn+1\mathbb{R}^{n+1}中的v=[v1]\overset{\sim}{\boldsymbol{v}}=\left[\begin{aligned}\boldsymbol{v} \\ 1\end{aligned}\right]那么,仿射组合与系数和为1的要求可统一表示为

[y1]=c1[v11]+c2[v21]++cn[vn1]\left[\begin{aligned}\boldsymbol{y} \\ 1\end{aligned}\right]=c_1\left[\begin{aligned}\boldsymbol{v_1} \\ 1\end{aligned}\right]+c_2\left[\begin{aligned}\boldsymbol{v_2} \\ 1\end{aligned}\right]+\cdots+c_n\left[\begin{aligned}\boldsymbol{v_n} \\ 1\end{aligned}\right]

也就是说,仿射组合可以写成高一维对应齐次坐标的线性组合形式。那么对于一个附加平移的变换

y=Ax+b\boldsymbol{y}=A\boldsymbol{x}+\boldsymbol{b}

我们可以将其改写成其次坐标的形式

\left[\begin{aligned}\boldsymbol{y} \\ 1\end{aligned}\right]=\left[\begin{aligned}&A &\boldsymbol{b} \\ &0 &1\end{aligned}\right]\cdot\left[\begin{aligned}\boldsymbol{x} \\ 1\end{aligned}\right]$$这也是在计算机图形学中对平移的处理方式。下面一个摘自维基百科的图形象地说明了这一过程 <center>![affinetransofrmation.gif](/blog/images/affinetransofrmation.gif)</center>            ## 其它   我们再来看看质心坐标(Barycentric Coordinates),采用质心坐标的好处在于它能够表示每一点受周围点的影响,质心坐标的系数越大,影响越大,因此在线性插值时,可以直接用质心坐标来乘以每一点的值,得出的就是插值后的结果,在计算机图形学中进行渲染时,颜色差值就用这种算法。                    ## 参考文献 [1]D C.Clay Linear Algebra and its application 4th edition [2]http://en.wikipedia.org/wiki/Affine_space [3]http://en.wikipedia.org/wiki/Affine_transformation

By Z.H. Fu
https://fuzihaofzh.github.io/blog/

网页中大部分的限制都是由js编写的,而chrome提供了一个修改js代码的工具,利用这个工具可以轻松解决各种时间等待之类的限制。本文主要通过利用chrome命令行修改变量值得方式,控制运行流程。

![chrome_button.PNG](/blog/images/chrome_button.PNG)
如图,我们看到该网站有一个阅读等待时间,而且一直没有任何变化,我们的目的是跳过这个等待时间。步骤如下: 1、按F12,打开调试面板; 2、打开source面板,找到相对应的代码;
![chrome_panel.PNG](/blog/images/chrome_panel.PNG)
Read more »

By Z.H. Fu
https://fuzihaofzh.github.io/blog/

sigmoid函数

sigmoid函数定义为

g(z)=11+ezg(z)=\frac{1}{1+e^{-z}}

对于一般的模型,通常有z=θTxz=\theta^{\mathrm{T}}x,可以看做是样本各属性的加权。sigmoid函数求导有g(z)=g(z)(1g(z))g'(z)=g(z)(1-g(z)),这个在神经网络推导的时候会用到。

Logistic回归

Logistic回归是针对二分类问题常用的一种回归,其回归模型为:

hθ(x)=11+eθTxh_\theta(x)=\frac{1}{1+e^{-\theta^{\mathrm{T}}x}}

其中xx是某个样本的属性向量,θ\theta是参数向量。在用Logistic回归时,需要找到合适的参数θ\theta,使得能量函数(误差)J(θ)J(\theta)最小,在使用梯度下降法更新参数θ\theta的更新过程中需要使用到梯度,然后在每一步执行θ:=θαθJ(θ)\theta:=\theta-\alpha\nabla_\theta J(\theta),其中α\alpha是学习速度,能量函数被定义为:

J(θ)=1mi=1m[y(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))]J(\theta)=-\frac{1}{m}\sum_{i=1}^m\left[y^{(i)}\log h_{\theta}(x^{(i)})+(1-y^{(i)})\log (1-h_{\theta}(x^{(i)}))\right]

其中

hθ(x(i))=11+eθTx(i)h_{\theta}(x^{(i)})=\frac{1}{1+e^{-\theta^{\mathrm{T}}x^{(i)}}}

下面来给出其梯度的推导

Read more »

By Z.H. Fu
https://fuzihaofzh.github.io/blog/

Everything should be made as simple as possible, but not simpler.\mathcal{Everything~should~be~made~as~simple~as~possible,~but~not~ simpler.}

AlbertEinstein--\mathcal{Albert\quad Einstein}

\begin{align} E&=\int_0^xFdx =\int_0^x\frac{d}{dt}(mv)dx =\int_0^t\frac{d}{dt}(mv)vdt =\int_0^{mv}vd(mv) =\int_0^v vd\left(\frac{m_0v}{\sqrt{1-(v/c)^2}}\right)\\ &=m_0\int_0^v\left(\frac{v}{[1-(v/c)^2]^{1/2}}+\frac{v^3/c^2}{[1-(v/c)^2]^{3/2}}\right)dv =m_0\int_0^v\frac{vdv}{[1-(v/c)^2]^{3/2}}\\ &=m_0c^2\left(\frac{1}{[1-(v/c)^2]^{1/2}}-1\right) =(mc^2-m_0c^2) =(m-m_0)c^2\Rightarrow \end{align}

E=mc2E=mc^2