Archive 2015 年 5 月 7 日

深度神经网络学习:线性回归与逻辑回归

    虽然大致明白了Sparse Coding的方法,但总觉得里面有还是有滞涩之处,按师父当年的教育来说,凡是遇到有思不通的问题时,必是基础不牢。所以重习一下线性回归与逻辑回归,以加清认识。     线性回归,从概念来说其实比较简单,它抽象成几何的概念,比如一个平面上,上面有一堆点,如果能用曲线把它们全穿起来,那么这个就是一个线性问题,因为可以用曲线把它们全覆盖,而线性问题就可以通过线性回归来解决。     对于回归这个词,如果用标准术语定义是这样的:回归研究一个随机变量Y对另一个(X)或一组(X1,X2,…,Xk)变量的相依关系的统计分析方法。研究一个或 多个随机变量Y1 ,Y2 ,…,Yi与另一些变量X1、X2,…,Xk之间的关系的统计方法。又称多重回归分析。通常称Y1,Y2,…,Yi为因变量,X1、X2,…,Xk为自变量。     所谓的回归,在下的理解就是,假设有那么一条线可以覆盖所有的点,然后不断在一个平面上画啊画啊,直到找出这个曲线为止,这个过程就叫回归。     而对于数据来说,它就是试图找出数据之间的关系,尤其是找出数据之间影响的显著关系。     而回归的方法,通常就是两种,一种叫最小二乘法。     最小二乘法是法国科学家勒让德于1806年独立发现的,但因不为世人所知而默默无闻,后来高斯《天体运动论》里使用了最小二乘法,后来勒让德跟高斯还掐了一架,争执是谁发明的。     这个过程非常简单,首先假设一个目标曲线为xi,那么每次尝试画出来的就是xj,比如在0点位置,而它们间的偏差就是x0-x0。     因为这里的Xi与Xj并不是两个点,而是两个函数,所以Xi与Xj之间相关做到最小。     显然,如果把每个Xi与Xj的误差都累加起来,就是两个函数的误差,但问题这样就不好求解了,所以用它们的平方差作为误差。所以总误差判断定为: Σ(xi-xj)2     要总误差最小,当然最好是Xi与Xj相等,问题是现在本来就是要找出xi,而不断尝试画的是xj.而要求的是如何能让xj不断通过调整变成Xi。     因为第一个xj相当于随手乱画上去的一条曲线,所以把这个问题转化成:如何让Xj能更快接近Xi。    …

Read More

深度神经网络学习:AutoEncoder之Sparse Coding(稀疏编码)

  这个是一个让人感觉很神异的技术,给一堆图片,然后用软件扫描,软件就能把图片中的特征找出来,这对人来说是很轻易的事,对软件来说,最大的问题就是,怎么应该进行才可以?   写软件的技术也不是多么高科技,最终需要用到的还是人的思想,然后把思想转化成代码,从而解决现实问题,编程可以说是一个验证思路的一个绝佳途径,在下甚至以为,新时期的道士,应该个个都掌握编程的技能。   说远了。   这个给了一堆图片,然后能提取出特征,应该怎么实现?   一般的问题想要智能解决,思路是这样的:给一组输入,再给一组输出,比如天气预报,输入的就是时间,输出就是天气,然后给神经网络任意赋上一堆值,再通过数学运算,看目标结果与需要的输出数据相差有多大,然后转化成微积分的方向,计算出运算路径中应该怎么反向调整数据才能拼凑出目标结果来,然后不断重复这个计算并再拼凑的过程,最后接近目标结果,得到满意答案而确定出来的神经网络中的参数,就可以理解为特性。   但是如果是一堆图片,这个怎么处理?如何提取图片中的特征,这里不得不说,有一个很有意思的解决方案。   它是这样进行的:   1、把图片切成各种小块,并把这些小块换成数据表达   2、用神经网络去运算这些数据   但问题来了,运算的数据的输出结果是什么?   这里就是极其聪慧的一点啊,输出的结果再进行一次神经网络运算,让它能输出为输入值。   输入-》运算(编码)-》运算(解码)-》输出   然后比较输入与输出,根据差值,去调整中间的编码运算与解码运算,而至于编码与解码到底在干什么是不用管的。   反正最后输入与输出结果精度达到满意要求时,所保留的就是特征了。   为什么会这样?其实原理很简单,中间的编码层的神经网络处理,相当于去将原图进行任意的干扰,而解码层的神经网络处理,相当于将干扰后的图像进行了恢复。   而这个过程有一个有意思的地方是,因为中间出现了干扰与解干扰的过程,输出等于了输入,多次变换后,保留下来能识别到原输入的就是特征。   同样的,可以在这种思路中,多加入一个混淆器,即随机添加大量的噪音,然后再消除掉,同样可以增强神经网络的搞干扰能力,而进行了干扰处理后的这种手法得到的编码器称为Denoising AutoEncoders降噪自动编码器。   这真是一个令人惊叹的想法,而且只能在计算机上实现,传统的其它计算工具是无法实现这个的,因为它依赖大密度的运算。   那么这样就够了么?   于是这里出现一种信念,这种特性的抽象是否可以尽量的简单再简单?   损之又损,以至于无为,无为而无所不为?   这个可能吗?   于是,如果坚持相信,再复杂的东西背后都有简单的规则的话,这里就可以基于这种信念再干一件事:稀疏化      怎么做呢?因为复杂的背后总有简单的规则是不是?那么简单的规则是不是就意味着可以删减很多东西后,还只保留最核心的一些东西,就能复原绝大部分原来的信息?   既然是这样,那么就意味着,如果能找到一种,让神经网络里大部分神经元不起作用也能进行成功由输入得到输出结果时,那么就能得到这个。   所以,可以对神经元进行限制,每个神经元有一个激活值,然后规定所有的神经元的总激活值,不得超过一个数值,比如0.05,那么这样就会导致大部分神经元变成0值,而极少数神经元需要更加精准的计算出自己的权值。   那这个怎么实现?   先从源头说起,稀疏化,实际上就是寻找一组“超完备”基向量来更高效地表示样本数据。稀疏编码算法的目的就是找到一组基向量…

Read More