SVM推导

实际上我们需要训练一个线性分类器(超平面):$$f(x)=sgn(w^{T}x+b)$$,也就是说当$$ w^{T}x+b \\geq 0 $$的时候输出1,否则输出-1。$$sgn()$$表示取符号。而$$g(x) =w^{T}x + b=0$$就是我们要寻找的分类超平面。
令$$H_{1}: w^{T}x + b= 1 和 H_{2}: y = w^{T}x + b=-1$$
好了,这时候我们就需要两个条件:(1)没有任何样本在这两个平面之间;(2)这两个平面的距离需要最大。(对任何的H1和H2,我们都可以归一化系数向量w,这样就可以得到H1和H2表达式的右边分别是+1和-1了)。
对于条件(2),例如$$ax+by=c_{1}$$和$$ax+by=c_{2}$$,那他们的距离是$$
\\frac{|c2-c1|}{\\sqrt(x2+y2)}$$
而用w来表示就是$$H_{1}: w_{1}x_{1}+w_{2}x_{2}=+1$$和$$H_{2}:w_{1}x_{1}+w_{2}x_{2}=-1$$,那$$H_{1}$$和$$H_{2}$$的距离就是$$
\\frac{|1+1|} {\\sqrt(w^{2}_{1}+w^{2}_{2})}=\\frac{2}{||w||}$$。
也就是说,我们需要最大化$$margin=\\frac{2}{||w||}$$,为了最大化这个距离,我们应该最小化||w||。同时我们还需要满足条件(1),也就是同时要满足没有数据点分布在H1和H2之间。
– 那么对于任何一个正样本$$y_{a}$$,保证$$y_{a}=w^{T}x+b \\geq 1$$
– 那么对于任何一个负样本$$y_{b}$$,保证$$y_{b}=w^{T}x+b \\leq -1$$
– 合并成一个式子后变成$$y_{i}(w^{T}x+b) \\geq 1$$

下面我们将这个问题转化为一个二次优化问题(Quadratic Programming)。
$$min\\frac{1}{2}||w||^{2}$$
$$s.t. y_{i}(w^{T}x_{i}+b) \\geq 1 , \\forall x_{i}$$
两个式子分别表示了,最大化支持向量与超平面的距离,在支持平面+1,-1区域内没有样本点。

统计学习的笔记

方差

$$D(X)=E(X^{2})-E^{2}(X)$$

伯努利分布(Bernoull)

常见的0-1分布,数学表示为:
$$p^{x}(1-p)^{1-x}$$
$$E(X)=p$$
$$D(X)=p-p^{2}$$

二项分布(Binomia)

二项分布是这样一种分布,假设进行n次独立实验,每次实验“成功”的概率为p,失败的概率为1−p,所有成功的次数X就是一个参数为n和p的二项随机变量.数学公式定义为:
$$p(x)=(_{2}^{2})$$

MongoDB使用笔记

属性操作

添加一个属性

  1. 第一个参数表示选中某些文档,这里为 {} 表示选中当前 groups 集合中的所有文档。

  2. 第二个参数为具体的更新操作,$set 表示添加属性。

  3. 第三个参数为额外选项,{ multi: true } 表示更新所有满足要求的文档,默认只会更新第一个。

删除一个属性

删除多个属性

文档操作

插入文档

删除一个文档

更新文档

数据库用户登录

集合操作

显示所有集合

删除集合

软件开发备注

生命周期

名称 描述
ionViewDidLoad 当页面加载的时候触发,仅在页面创建的时候触发一次,如果被缓存了,那么下次再打开这个页面则不会触发
ionViewWillEnter 顾名思义,当将要进入页面时触发
ionViewDidEnter 当进入页面时触发
ionViewWillLeave 当将要从页面离开时触发
ionViewDidLeave 离开页面时触发
ionViewWillUnload 当页面将要销毁同时页面上元素移除时触发

后台维护

显示所有正在运行的进程

停止某个进程

查看系统版本

Centos7安装fish插件

deeplearning.ai学习笔记

逻辑回归

$a^{1}$
$$y’=sigmod(W^{T}T+b)$$
$$sigmoid(z)=\frac{1}{1+e^{-z}}$$
$$y’=P(y=1|x)$$

如果是二元分类的输出层,用$$sigmoid(z)=\frac{1}{1+e^{-z}}$$,在其他地方用relu或者是tanh,$$tanh(z)=\frac{e^{z}-e^{-z}}{e^{z}+e^{-z}}$$,通常建议使用reluleaky relu,$$leaky relu(z)=max(0.01z,z)$$

sigmoid函数求导
$$f(z)=\frac{-(-e^{-z})}{(1+e^{-z})^{2}}$$
$$=\frac{e^{-z}}{(1+e^{-z})^{2}}$$
$$=\frac{1+e^{-z}-1}{(1+e^{-z})^{2}}$$
$$=\frac{1}{1+e^{-z}}-\frac{1}{(1+e^{-z})^{2}}$$
$$=\frac{1}{1+e^{-z}}(1-\frac{1}{1+e^{-z}})$$
$$=f(z)(1-f(z))$$

tanh函数求导 $$1-tanh(z)^{2}$$

卷积神经网络

  • 在卷积神经网络中,底层的过滤器(fliter)是用来处理边缘特征,可以很好地检索出图像的边缘。同时筛选器中的参数可以让神经网络自己训练出来,可以检测多种方向的边缘。
  • 过滤器的尺寸一般都是奇数,我的理解是,这样可以确定一个中心位置,便于接下来的计算。
  • 当过滤器的大小为1* 1时,作用相当于全连接,目的就是调整通道的数量。
  • 权值共享(parameter sharing)可以大量的削减参数量

循环神经网络

  • 在Beam Search中,对于每次生成的结果,并不使用贪心的做法,每次选择可能性最大单词作为生成的结果,二是设置一个b(beam width),每次保留前b个结果,然后在下一次生成的时候,根据加权后的概率P(y^{2}|y^{1},X)生成b*n个候选结果,以此类推选择最大的b个结果,这样的话,计算的整体复杂度会变成b倍,但是生成的结果会更好。

基础训练

D – 字符串加密

F – 偶数求和

G – 密码

K – 砝码称重

J

排序

A

B – 竹青遍野

C – Smith Numbers

B – Number of letters

 

Windows10_64+tensorflow0.12+cuda8+cudnnv5+Anaconda4.2.0安装教程

转眼间一年过去了,上次接触tensorflow是在一年前,通过一年的学习我发现,我还在配环境。。。。。

1.安装Anaconda4.2.0

Anaconda直接官网下载即可,里面自带了大量的科学计算工具和python、pip,推荐。

2017_1_16_1

2.安装tensorflow

CPU版:

如果你不需要GPU加速的话,那么到现在为止就结束了。

GPU版:

3.安装CUDA ToolKit

首先要先在这里确认一下你的GPU版本,附图一张:

2017_1_16_2

1.你要保证你的显卡CC大于等于3.5.

2.你的显卡驱动是最新的。

3.你要有相应的VS版本,我已经安装好了VS2015。

2017_1_16_4

下载CUDA,下载完之后是exe,直接安装即可,过程比较费时间,我曾经卡在installing nsight visual studio…….上很久,后来发现是显卡驱动没更新,更新下就好了。

安装完之后试一下这个命令

效果显示如下:

2017_1_16_3

4.安装CUDNN Toolkit

下载链接

2017_1_16_5

其实这个是一个压缩包,解压放到任何一个目录下就行,然后把你放的那个目录添加到Path环境变量里。

2017_1_16_6

之后要讲三个文件分别放在CUDA三个目录下:

5.测试

2017_1_16_7

6.参考

TensorFlow在Windows 10上安装手记

【TensorFlow】Windows10 64位下安装TensorFlow – 官方原生支持

TensorFlow 官方文档中文版

7.下一步思考

复现GAN学习指南:从原理入门到制作生成Demo

2016ICPC大连赛区题解

2016ACM/ICPC亚洲区大连站-重现赛(比赛链接)

1001. Wrestling Match

1003. Game of Taking Stones

 

1004. A Simple Math Problem

官方题解(PDF)

 

1005.Aninteresting game

1006.Detachment

1007. Garden of Eden

1008.To begin or not to begin

1009. Convex

1010. Find Small A

 

2016ICPC沈阳赛区题解

1003.Recursive sequence

http://acm.hdu.edu.cn/showproblem.php?pid=5950

题意:$$f(n)=f(n-1)+f(n-2)*2+$$ $$n^{4}$$,给定前两项,求第n项。

思路:矩阵快速幂,

$$n+1=n+1$$

$$(n+1)^{2}=n^{2}+2n+1$$

$$(n+1)^{3}=n^{3}+3n^{2}+3n+1 $$

$$(n+1)^{4}=n^{4}+4n^{3}+6n^{2}+4n+1$$

所以我的矩阵快速幂有七项,分别是$$f(n),f(n-1),1,n,n^{2},n^{3},n^{4}$$

1005.Counting Cliques

题意:$$n \leq 100$$ 个点,$$m \leq 1000$$ 条边的图,求大小恰好是 $$s \leq 10$$ 的完全图的数量,保证度不超过20。

思路:我用的是bitset+暴搜。本来图是用一个邻接矩阵来存储,但是那样如果要暴力判断一些点是不是完全图的时候,需要$$O(n^{2})$$复杂度,所以我使用bitset存储每一行,这样在DFS时候,如果要判断这个点是不是与祖先们的点都相连,只需要将这一位的bitset与DFS维护的bitset相与,如果结果小于DFS维护的bitset,说明这个点肯定和之前某一个点不相连。

 

1009.The Elder

题意:$$f_{i}= min_{j \ is \ an \ ancestor \ of \ i}(f(j)+dis(i,j)^{2}+(j==root?0:p))$$,求最大的$$f(i)$$。

思路:这个题目是就是HDU3705的增强版,几乎一毛一样,只是把线性改为了树形,首先我们会很容易得出一个$$O(n^{2})$$的DP,那么我们需要斜率优化一下,

首先容易得到一个dp,$$dp[i] = dp[j] + (sum[i] – sum[j])^{2} + p$$,
// 不过复杂度不够,考虑优化。
对于$$k<j<i$$,若j是比k更好的选择,那么
$$dp[j] + (sum[i]-sum[j])^{2} + p \leq dp[k] + (sum[i] – sum[k])^{2} + p$$
推出
$$\frac {dp[j] + sum[j]^{2} – (dp[k] + sum[k]^{2})} { 2sum[j] – 2sum[k] }\leq{sum[i]} $$
我们令$$y_{i}=dp[i] + sum[i]^{2}, x_i=2*sum[i]$$,式子就可以改写成
$$\frac{y_j – y_k}{x_j – x_k}$$$$ \leq sum[i]$$,
如果把$$(x_i, y_i)$$看作一个点,其中左边是斜率,右边是个单调递增(不减),
的函数。

我们令斜率$$K_[k, j]=\frac {y_j – y_k}{x_j – x_k}$$,$$K_[j, i]=\frac{y_i – y_j}{x_i – x_j}$$,.首先如果$$K_[k, j]\leq sum[i]$$, 我们说当前决策点j比k优(由假设推得),并且sum[i]一直
递增,那么j接下来也一直比k优,反之,我们就说当前决策点k比j优。

%e6%96%9c%e7%8e%87%e4%bc%98%e5%8c%961

假设$$K_[i,j] < K_[k,j] \leq sum[i] $$,因为$$K_[k,j] ] \leq sum[i]$$,所以j点不是最优点.

那么如果$$K_[j,i] < K_[k,j] $$&& $$K_[j,i] >sum[i] $$,那么$$K_[k,j] >sum[i] $$,所以k比j点优,j不是最优点。

所以我们需要维护的是一个下图一样的下凸图形,方法是单调队列。

%e6%96%9c%e7%8e%87%e4%bc%98%e5%8c%96
以上是斜率优化的内容,那么对于这个题,我们要考虑树上的问题,因为在子树中,我们可能会对单调队列进行修改,那么递归回来的时候,需要恢复,我用的方法是对于每一个点打一个时间戳,然后对于修改操作用栈来存储,当递归完一颗子树之后,将堆栈中属于子树的操作弹出,恢复数组的样子,然后递归另一颗子树。

这里另外给出qj大神的一种想法,因为每次对于单调队列的操作只会改变尾部的一点,那么可以将这一个点的变化记录下来,恢复的时候就不用全部恢复,只需要回复一个点就好。

再次感谢qj大神教我斜率优化。