关于编程中的数学问题
比如以前研究三维渲染时,涉及了矩阵,虽然数学分析看似很麻烦,但只要明白其中的原理就完事儿了,具体实施时,不用自己重新做,而是Direct 3D或OpenGL库自己已经做好了很多包装函数,我只要按常规做法调用一下函数,输入一些参数,并取得函数输出就行了。
如果自己去实施那样的库,用尽一生精力去搞,未必搞不出来一个轮廓,但弟兄中一大批喜欢数学的工程师既然依靠集体力量封装好了那些函数,我们普通编程者就省事儿了,我这里可以尽量用常人思维,用傻瓜思维,即用黑盒方法(只考虑函数的外部功能),来实施编程就行了。
现在涉及学习人工神经网络编程时,也主要是从大局着手考虑,比如要想明白它具体是用来解决哪些问题的。为什么这些问题不使用普通编程而必须采用人工神经网络编程。答案是,如果输入数据集巨大,我想从这些数据中快速识别信息模式,以便于分类(比如从视觉像素集合中识别物体特征),就最好采用人工神经网络编程,原因在于,这就是解决这类问题的“普通编程”手段。
又比如如今Youtube上视频的语音识别,已经做到了令人惊愕的快速准确地步,这也是利用人工神经网络编程技术,通过识别语音信息模式来实现的。
当然,大型网站提取注册用户海量浏览信息,从中发现用户喜好模式时,也都采用人工神经网络深度学习编程技术。所以应用相当广泛。就是说,当你从任何对象,比如一本书中,提取大量输入信息,想处理它们,以获得某种有用信息时,都可以,或者说必须采用人工神经网络编程。
那么比如Google的TensorFlow人工神经网络编程库,就是这样的大型数学工具了。我看大师分析时,涉及到微积分,尤其是求导。说实话具体的导数运算我都忘光了,但要想编程,我得明白它各种函数的原理,要搞清楚到底是怎样前向传播和反向传播的,在这个过程中到底检测了什么的最小成本、最小损失。运算规则是如何简化分析方法的。到底存在哪些运算规则。机器自学习、深度学习到底是如何实现的。
要从简单例子开始学,比如首先识别手写字符像素集合。像0~9这样的数字,在神经网络中需要10个输出神经节点。实质我理解就是利用TensorFlow中的库函数对具体问题求解的10段彼此类似的程序段。还要弄明白隐藏层为什么要设置多个?每层为什么设置了多个节点?数目是如何确定的?各层想解决什么问题?总共在输入层需要多少个神经节点,等等。
所以,只要学会研究简单例子,未来就能灵活运用神经网络设置,来实施其它领域的“普通编程”,以解决各种复杂问题了。所以我觉得数学根本不是个问题。而且国外类似于TensorFlow的数学工具库种类很多,互相有竞争,都巴不得用户采用。当然最近由于某国想对中国技术人员断供,必然会遇到问题,但编程人员不能遇到困难就止步不前了,而要更加具有专研精神。
关于人工神经网络编程,开源代码中Python居多,但我个人对Python并不很熟悉,虽然能够成功搭配Python编译环境,做一些简单应用,但Python的代码格式实在太糟糕,我也不想学它。我更喜欢C\C++\C#套路,所以未来应该找到相关的可用库。线索比如这个: https://joe-antognini.github.io/machine-learning/build-windows-tf
别想从国内CSDN等获得有用信息,这些地方已经腐朽了,只注重金钱,不注重知识传播。所以高端技术必须亲自用英语从国外找到。为此,没有我这样的英语水平根本就不行啊。哈哈哈。
当然啦,我现在很闲,有时间玩这些,研究成了也是用来玩的。就比如前几天我来了个神发力,从头开始用VC构建了一个小软件,这个软件最近通过不断打磨,已经相当好用、好玩。真正的好东西都只能由编程人员自己用,自娱自乐,不能给别人用。没办法,这也许是命运。
总而言之,编程中不要怕数学,数学是个啥,就是个库。或者一些库。