纵深学习的声量(泡泡)一言以蔽之,SDDrawView箭头样式更就像于QQ截图中的箭头

澳门新浦京8455com 16

我在用TeeChart的GetAsSurface.AddXYZ画三维曲面时,不能完整画下来,总有部分曲面显示不出来,但是用GetAsPoint3D却可以将点描出来,不知道为什么,应该如何操作,谢谢!和以前的Mr_Spleen的一个帖提出的问题一样,是否有大侠给予解惑。这里将以前的帖子借用一下:用teechart的surfaceseries类画出的图不对,但是改成point3D类能画出效果,求大神支招[问题点数:40分]收藏帖子回复Mr_SpleenBbs1结帖率0%序列部分的代码是这样的doubleu,v,beamdata_log;for(aa=0;aalinecount;aa++){u=sin(theta_turn[aa]*pi/180)*cos(phi_turn[aa]*pi/180);v=sin(theta_turn[aa]*pi/180)*sin(phi_turn[aa]*pi/180);beamdata_log=20*log10(beamdata_turn[aa]/max);m_TeeChart.Series(0).GetAsSurface().AddXYZ(u,beamdata_log,v,NULL,RGB(255,255,0));}画出的图是这样的如果把GetAsSurface()改成GetAsPoint3D()能画出效果,效果如下

澳门新浦京8455com 1

1.1 一个简单的例子

如图,存在红圈和黄十字两个类别,原始特征分别为一维空间-2,-1,1,2四个点,基于该数据,简单的可以直接+第三层分类任务进行建模,效果从图中容易判断,准确率最高可以达到75%,进一步,我们发现可以在第一层和第三层之间加一个简单的数学变换,即新生成一个特征Y=X的平方,然后用新的特征再进行一层分类任务后建模发现准确率可以达到100%。其实第二种方法可以简单看做深度学习的特殊情况,即X平方的转换可以看做是中间一个子层一个节点的普通网络。

澳门新浦京8455com 2

一维空间.png

澳门新浦京8455com 3

二维空间.png

属性或者方法 说明
drawViewColor 画板颜色
lineWidth 画笔宽度
drawStyle 绘制样式 值为DrawStyle的枚举值
lineColor 画笔颜色
– cleanAction; 清除画板
– rollbackAction; 回退上一步

澳门新浦京8455com 4

序列部分的代码是这样的doubleu,v,beamdata_log;for(aa=0;aalinecount;aa++){u=sin(theta_turn[aa]*pi/180)*cos(phi_turn[aa]*pi/180);v=sin(theta_turn[aa]*pi/180)*sin(phi_turn[aa]*pi/180);beamdata_log=20*log10(beamdata_turn[aa]/max);m_TeeChart.Series(0).GetAsSurface().AddXYZ(u,beamdata_log,v,NULL,RGB(255,255,0));}画出的图是这样的如果把GetAsSurface()改成GetAsPoint3D()能画出效果,效果如下但是u轴和v轴刻度没有显示,这个东西搞了我几天了,

6. 结论

绝大部分的建模过程都可以粗略的抽象为输入、特征学习、任务三层,目的是通过任务层,对特征学习层进行抽象,得到线性可分的特征空间,反过来提高任务层的性能。

[1.3]:
http://latex.codecogs.com/gif.latex?{g(f(wTX))=-\log[\frac{1}{1+exp(\sum_{j=1}mw_jx^j)}]}
[1.4]:
http://latex.codecogs.com/gif.latex?{g(f(wTX))=-\log[\frac{1}{1+exp(\sum_{j=1}mw_jx^j)}]}
[1.5]:
http://latex.codecogs.com/gif.latex?{frac{partial{L}}{partial{w_j}}=sum_{i=1}n[y_ix_ij+frac{1+exp(sum_{j=1}m-w_jx_ij)}{exp(sum_{j=1}m-w_jx_ij)}cdotfrac{-1澳门新浦京8455com,cdot{exp(sum_{j=1}m-w_jx_ij)}}{(1+exp(sum_{j=1}m-w_jx_ij))2}\cdot{x_ij}]}
[1.6]:
http://latex.codecogs.com/gif.latex?{frac{partial{L}}{partial{w_j}}=sum_{i=1}n[y_i-\frac{1}{1+exp(\sum_{j=1}m-w_jx_ij)}]\cdot{x_ij}}

[1.7]:
http://latex.codecogs.com/gif.latex?{g(f(wTX))=exp(\sum_{j=1}mw_jx^j)}

附录:各个公式
指数分布族分布表达式
![][2]
[2]:
http://latex.codecogs.com/gif.latex?{f(y;theta)=t(y;phi)s(theta;phi)e^{frac{thetay}{a(phi)}}=exp[frac{thetay-g(theta)}{a(phi)}+Phi(y;phi)]}
其中,
![][3]
[3]:
http://latex.codecogs.com/gif.latex?{​​t(y;phi)=exp[Phi(y;phi)]​}
![][4]
[4]:
http://latex.codecogs.com/gif.latex?{​​​​s(theta;phi)=exp[frac{-g(theta)}{a(phi)}]​}
分布函数在定义域内积分等于1
![][5]
[5]:
http://latex.codecogs.com/gif.latex?{​​​​​intf(y;theta)spacedy=1}
两边同时取对theta求偏导数
![][6]
[6]:
http://latex.codecogs.com/gif.latex?{​​​​​frac{d}{dtheta}intf(y;theta)dy=frac{d}{dtheta}cdot1=0}
![][7]
[7]:
http://latex.codecogs.com/gif.latex?{​​​​​intfrac{df(y;theta)}{dtheta}dy=0​}
期望的积分表达式
![][8]
[8]:
http://latex.codecogs.com/gif.latex?{​​​​​E(x)=intxcdotf(x)dx}
进一步推导
![][9]
[9]:
http://latex.codecogs.com/gif.latex?{​​​​​frac{df(y;theta)}{dtheta}=[frac{y}{a(phi)}-frac{g^prime(theta)}{a(phi)}]f(y;theta)}

![][10]
[10]:
http://latex.codecogs.com/gif.latex?{​​​​​intfrac{df(y;theta)}{dtheta}=int[frac{y}{a(phi)}-frac{g^prime(theta)}{a(phi)}]f(y;theta)dy=0}
![][11]
[11]:
http://latex.codecogs.com/gif.latex?{​​​​[frac{E(y)}{a(phi)}-frac{g^prime(theta)}{a(phi)}]=0}
最终得到指数分布族的期望通用解:
![][12]
[12]:
http://latex.codecogs.com/gif.latex?{​​​​E(y)=g^prime(theta)}
似然-loss
![][13]
[13]:
http://latex.codecogs.com/gif.latex?{​​​​l(theta|D)=prod_{i=1}^nexp[frac{theta{y_i}-g(theta)}{a(phi)}+Phi(y;phi)]​}
似然-log-loss
![][13.1]
[13.1]:
http://latex.codecogs.com/gif.latex?{​​​​L(theta|D)=sum_{i=1}^n[frac{theta{y_i}-g(theta)}{a(phi)}+Phi(y;phi)]​}
对参数求偏导数
![][13.2]
[13.2]:
http://latex.codecogs.com/gif.latex?{​​​​frac{partialL}{w_j}=frac{partialsum_{i=1}n[\frac{f(wTX)y_i-g(f(w^TX))}{a(phi)}]}{partial{w_j}}}
![][13.2.1]
[13.2.1]:
http://latex.codecogs.com/gif.latex?{​​​​frac{partial{L}}{w_j}=frac{partialsum_{i=1}n[\frac{f(\sum_{j=1}{m}w_jx_ij)y_i-g(f(\sum_{j=1}{m}w_jx_i^j))}{a(phi)}]}{partial{w_j}}}
链式法则
![][13.2.2]
[13.2.2]:
http://latex.codecogs.com/gif.latex?{​​​​​frac{partialL}{w_j}=sum_{i=1}n[\frac{y_i}{a(\phi)}\cdot\frac{\partial{f(\sum_{j=1}mw_jx_ij)}}{\partial\sum_{j=1}mw_jx_ij}\cdot\frac{\partial\sum_{j=1}mw_jx_ij}{w_j}-\frac{1}{a(\phi)}\cdot\frac{g(f(\sum_{j=1}mw_jx_ij))}{\partial{f(\sum_{j=1}mw_jx_ij)}}\cdot\frac{\partial{f(\sum_{j=1}mw_jx_ij)}}{\partial\sum_{j=1}mw_jx_ij}\cdot\frac{\partial\sum_{j=1}mw_jx_i^j}{partial{w_j}}]}
给theta赋予自变量的表达
![][13.3]
[13.3]:
http://latex.codecogs.com/gif.latex?{​​​​theta=f(w^TX)}

![][13.4]
[13.4]:
http://latex.codecogs.com/gif.latex?{​​​​L(theta|D)=sum_{i=1}n[\frac{f(wTX){y_i}-g(f(w^TX))}{a(phi)}+Phi(y;phi)]​}
Lasso
![][14]
[14]:
http://latex.codecogs.com/gif.latex?{​​​​​l(theta|D)=prod_{i=1}nexp[\frac{\theta{y_i}-g(\theta)}{a(\phi)}+\Phi(y;\phi)]\cdot\prod_{j=1}dfrac{1}{2b}exp^{-frac{|w_j|}{b}}}

![][14.1]
[14.1]:
http://latex.codecogs.com/gif.latex?{​​​​​L(theta|D)=sum_{i=1}n[\frac{\theta{y_i}-g(\theta)}{a(\phi)}+\Phi(y;\phi)]+\sum_{j=1}d{frac{log(2b)}{b}cdot{|w_j|}}}
普通似然loss的后验估计表示
![][15]
[15]:
http://latex.codecogs.com/gif.latex?{​​​​​l(theta|D)=prod_{i=1}nexp[\frac{\theta{y_i}-g(\theta)}{a(\phi)}+\Phi(y;\phi)]\cdot(\frac{1}{b-a})d}

​​

​​

澳门新浦京8455com 5绘制分析图

5. 第二层:特征学习/表示-杂谈

我们在建模的时候,非常重要且往往决定结果好坏的环节是特征的提取,也就是我们谈的第二层的内容,而特征的提取无非就人工和机器自动提取两种,有一个有意思的观点认为无论是深度学习还是人工特征浅层学习,目的都是有目的的进行“信息丢失”的过程,其实这个可以从数学上严格证明(参见:Data
Processing
Inequality),因为在不添加新数据的条件下,原始数据包含的信息量是最大的,之后对其进行处理和特征工程,信息就是在逐步损失掉,那么有人可能要疑问了:既然只要做特征,信息就减少,岂不是效果会变差吗?其实,并不矛盾,我们容易想到,无论建立何种模型、进行何种特征学习都是为了完成某个领域的任务,那么进一步可以想到原始数据中一定包含该任务下不需要的信息,所以理论上,我们做建模和特征工程理想情况是努力把为完成某项任务不需要的信息损失掉,从而使得模型效果反而提高,其实对应人脑信息损失的过程也可以理解为“抽象”的过程。例如,我们大脑储存了大量的信息和记忆,如果给定一个任务去判断某动物是不是狗,那么人通常会是从脑中记忆的大量信息中丢弃与狗无关的信息,并把狗想关的多种扁平特征抽象到一个高维“立体”空间来进行判断,最终得到该动物是否为狗的识别。
“抽象”在数学概念里(与我们今天讨论话题相关的概念)可以用一个词叫“线性可分性”来约等于,很面熟的一个概念,很多人对这个概念的了解可能会出自于流行多年的SVM,大概的过程是判断原始特征是否“线性可分”,如果不可分,则采用核方法将原始特征“升维”以获得更丰富的数据表达,以实现在新的空间里“线性可分”,核方法是非参数的思想,基本思路是通过一个正定核,得到一个线性映射将数据映射到一个RKHS(
Reproducing Kernel Hilbert
Space)中,然后使用RKHS中的线性模型来处理数据,可能有人要疑问了,为啥一定要“线性可分”而不是直接找一个非线性的表达来做。道理很简单,线性函数非常容易表达和估计,我们无法找到一个具体的非线性表达来对原始数据进行抽象,所以不论是SVM也好还是神经网络,本质都是通过可以抽象出来的通用变换来产生新的空间,并使得输入层可以在新的空间找到线性表达完成模型任务。

- rotateVecWithPx:px py:py ang:ang newLen:newLen{ double vx = px * cos - py * sin; double vy = px * sin + py * cos; double d = sqrt(vx * vx + vy * vy); vx = vx / d * newLen; vy = vy / d * newLen; return CGPointMake vx,  vy);}

3.1 同样从简单的例子说起

基本的线性回归模型是一个从由自变量X组成的m维空间到一组因变量Y组成的空间的线性映射,基本形式:

澳门新浦京8455com 6=u_i=x_i%5ET%5Cbeta;%5Cspace%5CY_i:N(u_i;%5Csigma%5E2)%5Cspace%5B1%5D%7D)

其中,Yi为独立于关于X线性组合的随机变量,高级统计理论和现代计算性能允许我们通过更一般的情况扩展建立类似的其他线性模型:

  • 因变量不一定是正态分布,可能会是二项分布、多项分布、泊松分布等;
  • 因变量和自变量之间的关系不必要像上面表示的线性形式

满足上面两点性质可以共享更多分布形式的有一个族类叫“指数分布族(exponential
family of distributions)”
,即可以通过一个叫连接函数(link
function)g来扩展[1]式:

澳门新浦京8455com 7=x_i%5ET%5Cbeta%7D)

澳门新浦京8455com 8

深度学习(Deep
Learning),近几年火的近乎家喻户晓,曾经的算法、机器学习局部升了个级华丽转身成为人工智能(AI)。但传言深度学习的爆发可以从
Hinton 在 2006 年提出的Deep Belief Network (DBN)
的训练算法开始,才将数十年的多层神经网络效果差和落败于统计学习的尴尬局面得以扭转,在与统计学习之争中逐占上风,之后一发不可收拾,各种网络和模型也相继在学术界和工业界被织出来,逐步颠覆和更新了语音识别、图像识别、自然语言处理-文本等众多领域。再加上各大公众媒体的宣传,此刻及未来数年(也许)
深度学习的声量(泡泡)不言而喻。。
所以,凑个热闹,记录下俺对深度学习/神经网络和许多现有的统计学、特征表示之间关系的理解和观点。

澳门新浦京8455com 9

3. 第三层:GLM

根据上面的分析,其实可以把深度学习后两大层看做是一个递归的广义线性模型(Recursive
Generalised Linear
Model),即每一细分层都是一个可复制的GLM,GLM作为概率建模的基石之一,在我们接触到的应用中无处不在,也很实用。

SDDrawView初始化也比较简单.我们初始化一个SDDrawView对象然后添加到对应的View视图上即可.

3.2 指数分布族表示

考虑一维的因变量Y,其概率分布只依赖一个参数theta,则指数分布族可以表示为:![][2]
其中,
![][3]![][4]该式中我们感兴趣的也是需要估计的参数是theta,其他均为“调节参数”,通常可认为已知。

澳门新浦京8455com 10

1. 三层架构-框架抽象

从模型架构的角度,我们似乎可以粗略地把绝大部分的建模架构抽象为三个组件/三大层:输入数据/特征层、特征表示/学习层和任务层。输入层可以理解成原始的特征或简单清洗后的特征,不同算法或框架的区别在第二大层和第三层上(这里的第二层是为了抽象的框架的概念,中间可以包含多层子层),比如最简单的是没有中间层,直接把输入层输出给任务层做分类;传统的人工特征工程在第二大层表现为求sin、平方、开方等简单的数学方法,产生新的特征,然后输出给第三层做分类;SVM第二层通过Kernel
Method将输入层特征“升维”到高维空间张成新的特征向量,以便在第三层更容易分类;同理GBDT也是在第二层进行树形特征学习和表示,然后经过第三层的修正优化得到漂亮的分类结果;而今天的主角深度学习(网络)则是在第二层通过多层子层进行特征的学习和传递,同样通过第三层进行任务的修正优化,得到更优的结果。再进一步抽象,第三层的表示大部分可以通过GLM(广义线性模型)进行表示。特别地,深度学习网络中间的每一子层也都可以看成上一层的输入和权重的线性组合,并把结果封装传入一个简单的非线性函数(GLM的连接函数),最后通过第三大层的进行统一的优化。可以发现随着研究的进步,总的框架其实没有巨大变化,只是在中间特征学习的智能性或线性可分性的转化上是在不断的进化,本质都在做特征的抽取和学习。
深度学习其实很关键的一点就是得到好的特征表示(representation),通过深度学习第二层学习的出来的网络,即使抛弃第三层的分类/回归模型,直接把学习到的网络(参数)当做新的特征,把这堆特征丢到普通的
LR之类的分类器里,往往也会得到分类性能提高。

 //初始化箭头的相关固定值 KEY_POINT_LEN1 = 70; KEY_POINT_LEN2 = 55; KEY_POINT_LEN3 = 8; KEY_POINT_ANGLE1 = 30 * M_PI/ 180; KEY_POINT_ANGLE2 = 18 * M_PI/ 180; KEY_POINT_ANGLE3 = 90 * M_PI/ 180; KEY_POINT_RATIO1 = 0.2; KEY_POINT_RATIO2 = 0.157; KEY_POINT_RATIO3 = 0.023;

4. 第二层:特征学习/表示-正谈

接下来,我们来拆解第二层,即真正的网络层,从前面的介绍以及图表示环节,大概需要理解两个关键环节:顶层(第三层)Loss
function的构建、优化(即第三层与中间第二层以及第一层之间参数如何传递和共享)。对于Loss
function的构建需要观测到的数据(人工标注的label或target,或自产生的label-典型如RNN),前面我们分析过,中间层其实也是一个个GLM的小模块,由前一层的输出作为输入的线性组合与连接函数(激活函数)组成:在优化环节如何把标注的信息通过参数或梯度传递给前面隐层达到整体效果优化的目的呢,这里有一个核心方法叫“后向传播”(Back
Propagation),为了方便理解,后面的解析结合图形以及以单节点的多层网络为例,首先我们看一个2层(针对中间层定义)单节点网络:

澳门新浦京8455com 11

单节点网络.png

从图中可以看出,每个神经元节点都是连接上一层的函数,从两外一角度来看,当我们改变w1的数值,神经元节点的结果“h1”和“h2”层的结果都会发生变化,最终将变化传导给output
Y,即顶层,由上面的解析,我们最终是通过设计顶层的Loss
function来进行参数的优化和传导,用数学公式将顶层的output表达为一个混合函数如下:

澳门新浦京8455com 12%7D)

澳门新浦京8455com 13%7D)

澳门新浦京8455com 14%7D)

所以最终output的表达式为:![][4.4]
也就是说整个中间层输出给顶层的output是一个由各层参数、输入层数据/特征以及activation
function(s)的混合函数。接下来如果想对每个参数求梯度(以w1为例),采用链式法(chain
rule)则逐个求解即可:![][4.5]

[4.4]:
http://latex.codecogs.com/gif.latex?{Y=g3(w3cdot{g2(w2cdot{g1(w1cdot{X})})})}
[4.5]:
http://latex.codecogs.com/gif.latex?{frac{partial}{partial{w1}}Y=frac{partial}{partial{h2}}Ycdotfrac{partial}{partial{h1}}{h2}cdotfrac{partial}{partial{w1}}h1}
接下来,我们使用上一节推导的Loss function以及观测到的Target
Y将第二层的输出和第三层进行连接,如图:

澳门新浦京8455com 15

网络-loss.png

由上一节推导,我们得到顶层的Loss function通用方程为:![][4.6]
将第二层输出的output综合表达函数带入得到:![][4.7]
注意!这里的g1、g2、g3为中间层的连接函数,g为顶层的连接函数。此时,我们已经通过Loss
function和连接函数把整个三层建立联系,接下来可以最终对每个层的每个参数进行梯度求解和更新,依然以w1为例:![][4.8]
接下来使用观测到的数据运用后向传播和梯度更新,逐步迭代直至得到整个网络所有参数的值,用图示表达为:

澳门新浦京8455com 16

后向传播路径.png

如何快速集成SDDrawView?非常简单,只需要把SDDrawViewDemo下载下来,然后把Demo中的SDDrawView文件夹拖到你的工程中,然后如下导入头文件即可.

相关文章

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图