V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
eyp82
V2EX  ›  程序员

机器学习现在很火, 但有个疑问: 这跟普通程序员有多大关系? 或者说我们的价值在哪里

  •  2
     
  •   eyp82 · 2017-01-27 04:16:24 +08:00 · 16675 次点击
    这是一个创建于 2651 天前的主题,其中的信息可能已经有所发展或是发生改变。

    机器学习的算法, 基本就那几大类, 都是根据各种教授研究员们的论文出来的, 各种库也有了, 我们非科研人员能做的就是利用现有的深度学习 /机器学习的库给的 API, 拿一批种子数据训练一下, 然后拿另一批数据验证, 调一下参数. 然后呢? 普通程序员 /架构师在这方面的价值在哪里?

    还请给专家指点.

    47 条回复    2017-01-31 16:40:40 +08:00
    q397064399
        1
    q397064399  
       2017-01-27 05:09:19 +08:00
    你有听说一种职业 叫做 调参狗
    snnn
        2
    snnn  
       2017-01-27 05:13:16 +08:00 via Android   ❤️ 1
    举个例子,几个月不写 c++,你会觉得自己什么都懂了,语法上没有什么需要继续学的。但是一旦回到天天写 c++的日子,就会时不时的有新收获,发现要学的还很多,这东西很难

    机器学习呢,现在还是很幼稚的阶段,理论欠缺甚多,远未成熟。实际做事也是,摸索着前进。
    murmur
        3
    murmur  
       2017-01-27 05:16:12 +08:00   ❤️ 1
    这跟普通程序员没多大关系,但是培训班是绝对不会讲这些东西的,就算是调参要么靠直觉要么靠数学两个都不会你能干嘛
    一个训练程序多少个参数呢 都是阿尔法北塔伽马的
    这是核心竞争力
    对了 调参你以为很简单么?训练数据放多少合适?迭代次数多少合适?多了会不会过拟合?

    当然了,迫于经济压力,现在的机器学习算法都给竞价排名让步了
    bravecarrot
        4
    bravecarrot  
       2017-01-27 08:10:20 +08:00 via iPhone
    调参方法都是商业秘密
    model 都差不多 看谁调参厉害
    binux
        5
    binux  
       2017-01-27 09:32:57 +08:00 via Android   ❤️ 2
    机器学习是一个工具,在不同的场景需要搭建大量的 pipeline 才能使用。而大量现成的库和模型让一般程序员也能利用机器学习的成果。
    其次机器学习,数据远比模型重要,你其实并不需要一个 ML 博士,也有可能做得更好。即使你做不到最优的模型,一个最简单的概率模型也能带来 80%的提升。
    最后,机器学习不是魔法,它无法噗地一下就解决你的问题,启发式算法并不可耻。详见 rules of ml 我觉得写得很好。
    UnknownR
        6
    UnknownR  
       2017-01-27 10:04:24 +08:00
    什么火做什么,乘机捞一笔走了,跟着资本走才有钱赚,只要不忘了技术的本质就好,或者能下定决心跳槽
    18600491593
        7
    18600491593  
       2017-01-27 10:28:48 +08:00 via Android
    人的作用在于,思想创作。
    tinybaby365
        8
    tinybaby365  
       2017-01-27 10:48:42 +08:00 via iPhone
    @snnn 深度神经网络理论早已提出,后来的 GPU 计算能力也证明其可行。现在各种接近梯度消失,训练过拟合的方法不断出现。图像的机器分离效果已经超过人类,再觉得不成熟就是保守了。
    matrix67
        9
    matrix67  
       2017-01-27 10:52:36 +08:00
    广告推荐啊,滴滴打车最短路径选择啊。我就想的到这些东西了。

    还有比如知乎你一点进去很多乱七八糟的你不感兴趣,以后会有更好的 feed 流推荐?
    ipwx
        10
    ipwx  
       2017-01-27 11:08:51 +08:00   ❤️ 5
    首先反驳“机器学习的算法就这么几种”这一观点。少年你得去看看 Graphical Models ,针对每一个实际问题要先建概率图模型,这一步就得兼顾可计算性和对问题的刻画能力。然后你找一种分布式算法去算吧, Parameter Servers 在向你招手。可以说每一个不同的数学模型建出来的 Graphical Model 就是一个不同算法,要是不同意,你就得承认 HMM 和 Logistic Regression 是同一种算法(都可以由 Graphical Model 刻画)。

    要能精确通过数学语言刻画一个实际问题,这就是功力。

    如果你不想用 Graphical Model 而投降“黑箱”算法——深度(神经网络)学习。呵呵,你真以为神经网络是完全黑箱吗?你明白 CNN 是针对数据的什么特性在工作吗?( local receptive field + 平移不变性)应用到具体的问题上就更复杂了,比如两分类,我如果保证正例标注只会漏标不会错标,你如何修改标准的 loss function 以提升在这个具体问题上的性能?

    神经网络现在有很多零件,包括结构上比如 CNN, LSTM, Auto-Encoders ,启发式约束比如 L1/L2 正则化,各种 Sparsity Constraint ,训练方法比如 Nesterov Momumtum (一阶方法), L-BFGS (二阶方法)。网络结构尚且不说,其他每一个超参都会影响到最终训练出来的模型。如何训练神经网络是一种艺术而非技术。
    ipwx
        11
    ipwx  
       2017-01-27 11:10:53 +08:00
    接上面没说完的话。楼主问普通程序员的价值在哪里?那我可以明确说,价值就在调参。每一个公司、每一个不同应用,都是要调参的,不可能让学术界的人在这上面浪费大量时间(他们还要研究新的结构、新的模型呢)。

    而调参需要很多知识,否则你只能暴力调参,吃力不讨好。所以现在的“普通程序员”是没有调参的能力的。至于怎么办?我不知道。如何培养“普通程序员的调参能力”,这需要工业界去摸索。
    laoyuan
        12
    laoyuan  
       2017-01-27 11:19:08 +08:00
    干什么都脱离不了业务
    t6attack
        13
    t6attack  
       2017-01-27 12:04:07 +08:00
    你不知道做什么,那对你来说就没价值。
    zgqq
        14
    zgqq  
       2017-01-27 12:11:22 +08:00 via Android
    这个领域太高深,普通人能连砖都没得搬
    wdlth
        15
    wdlth  
       2017-01-27 12:35:58 +08:00   ❤️ 1
    比如把静态分析加上机器学习,可以研究出写多少代码后就会出现大 BUG ……
    snnn
        16
    snnn  
       2017-01-27 12:36:07 +08:00
    还是那句话,你懂得越少,越是觉得什么都知道。你懂得越多,越发现这简直就是伪科学。
    举个例子, SGD 被用了 10 几年,这东西真有什么理论基础吗?要说 paper ,早在 1950s 就有了。可是如果你拿它和 GD 、 BFGS 之流相比,你根本说不出来这东西为什么会 work ,你连优化的目标函数是什么都不一定能搞清楚。
    snnn
        17
    snnn  
       2017-01-27 12:40:05 +08:00
    你要是身在此行,必定需要经常读 paper ,关注行业动态。每年那么多大会,那么多 paper 发出来,总有几篇会启发到你,需要你去尝试。这时候你需要去准备 data ,去写 code , 去尝试你的想法。在别人那工作的好好的东西,在你这未必就有效。可能是他在撒谎,也可能是你工作做的不细致。总之,你不能坐等着,等着别人把这些都在 tensorflow 上面实现了,等着别人把一切都准备好了你只管输入几个参数点下 run 。那你就等着吧,等个 3-5 年肯定会有的。
    ipwx
        18
    ipwx  
       2017-01-27 16:53:01 +08:00
    @snnn 我觉得随机梯度下降优化的是整体目标函数的期望,随机变量是 mini-batch 。收敛性可能不满足,但是大体思想是没错的。至于收敛性…… 有多少数学方法的收敛性在实际计算机应用的时候是仔细考量过的?差不多收敛就行了。

    http://i1.piimg.com/4851/bb15e992a91de3c8.png
    googlebot
        19
    googlebot  
       2017-01-27 17:27:31 +08:00 via Android
    看着像江湖骗子,和治疗癌症一样,整天都有所为新的突破,都在忽悠,

    不过治疗癌症能骗钱,看来机器学习也能骗钱,
    Neveroldmilk
        20
    Neveroldmilk  
       2017-01-27 18:25:07 +08:00
    到最后就是建模优化,基本都是码农的活。
    @matrix67
    寻路算法跟深度学习关系不大。
    tinybaby365
        21
    tinybaby365  
       2017-01-27 18:25:25 +08:00
    @googlebot 不要坐井底之蛙,举个看得见的技术:人脸识别, https://www.faceplusplus.com.cn/,很多公司都在使用。
    googlebot
        22
    googlebot  
       2017-01-27 18:41:40 +08:00 via Android
    我 10 年前看过人脸识别,没任何难度,有个机构采集 30000 多个样本,共享出来,这个很牛,结果全世界的阿猫阿狗带会人脸识别,没有什么实际产品,

    我想说人工学习的实际用途, 家里一个安全摄像头,能自动学习认识家庭成员,有陌生人时报警,

    这是一个非常实际的需求,现在没有一个产品,所有家庭智能产品都在偷窥你隐私,把你的数据偷偷上传,
    googlebot
        23
    googlebot  
       2017-01-27 18:43:22 +08:00 via Android
    @tinybaby365 你人脸识别牛,就搞个认识陌生人的摄像头,自动学习的
    snnn
        24
    snnn  
       2017-01-27 18:56:38 +08:00 via Android
    @ipwx 假如 batchsize 等于 1 呢?
    ipwx
        25
    ipwx  
       2017-01-27 19:27:39 +08:00
    @snnn 我还是认为从原理上,它是符合那个期望的期望的式子的。只不过实践中,我觉得 batchsize 为 1 会导致很严重的收敛问题罢了。
    snnn
        26
    snnn  
       2017-01-27 19:30:27 +08:00 via Android
    @ipwx 不是。它和收敛性没有关系
    tinybaby365
        27
    tinybaby365  
       2017-01-27 20:26:47 +08:00
    @googlebot face++的在线 demo 你可以试一试。人脸识别:识别出图片中的人脸(不在训练集中的)标记出特征点,年龄等数据。你说的案例属于人脸检测,现在的应用有: iOS 的相册, Google 照片, Lightroom 。
    shijingshijing
        28
    shijingshijing  
       2017-01-27 20:34:27 +08:00
    这么说吧,这一块科学家、研究员相当于设计师,负责想 idea ,出蓝图;程序员相当于搬砖的民工,负责把蓝图盖成大楼。
    hanbing135
        29
    hanbing135  
       2017-01-27 20:50:52 +08:00 via Android
    Lz 想太多了 程序员在哪都没实际价值啊 (^0^)
    googlebot
        30
    googlebot  
       2017-01-27 22:29:56 +08:00 via Android
    @tinybaby365 你根本没明白,是家庭安全产品,陌生人登门时马上报警,非常急需的一个安全产品
    murmur
        31
    murmur  
       2017-01-28 00:06:32 +08:00
    @matrix67 广告推荐国内真没有用算法的。。都是竞价排名。。一个推荐比一个垃圾 满地都是页游广告
    估计最基本的关联规则都没人上
    murmur
        32
    murmur  
       2017-01-28 00:07:20 +08:00
    @ipwx PRML 里应该有一句,机器学习就两种算法,输出离散的叫分类,连续的叫回归。。
    所以某种意义上真没错。。
    lcqtdwj
        33
    lcqtdwj  
       2017-01-28 01:53:44 +08:00
    我浅薄的理解,机器学习大部分还是基于统计理论,读研的时候学过,后来觉得很失望,因为并没有创新,只是计算能力和数据量的提升。现在我很怀疑自动驾驶,因为统计总有个置信度,即使可以达到 n 个 9 ,小概率事件还是有可能发生,造成灾难。
    wjidea
        34
    wjidea  
       2017-01-28 05:07:43 +08:00
    举个例子吧, google 数据中心的能耗控制:

    https://cdn0.vox-cdn.com/uploads/chorus_asset/file/6821533/DC_PUE.0.png
    paulagent
        35
    paulagent  
       2017-01-28 05:51:58 +08:00
    @googlebot 你说急需就急需啦,做出来有几个人会买? 报警给谁,给你自己让你回家看还是报警给警察? 这种产品和国外的房屋警报系统有什么区别? 在国内这个产品能有什么市场
    googlebot
        36
    googlebot  
       2017-01-28 08:48:36 +08:00 via Android
    国内盗贼还少?这摄像头放家里,家里有陌生人,就手机发消息,这东西绝对是重新定义安全监控,
    northisland
        37
    northisland  
       2017-01-28 08:51:24 +08:00
    大概程序按照原理分 2 类:

    I. 基于规则的(语言解释器,编译器,支付,查询,计算平台等)
    II. 基于 AI 算法的(语音输入,手写识别,阿法购)


    大部分系统都是 I 类(你不希望你按规则写的代码,被不同的编译器读出不同的意思),大部分程序员从事的也都是 I 类。即使 II 类项目,也要有大量的 I 类程序作为接口。
    northisland
        38
    northisland  
       2017-01-28 08:56:52 +08:00
    机器学习套路比较深,不是李航那本蓝皮书就能概括的,起码得看懂 PRML 吧。
    普通做 I 类的也别想掺和了,
    做好 I 类, II 类的项目也需要 I 类的接口。

    作出稳定的 II 类系统很吃功夫的。 I 类用好就很不错的,用不着羡慕 II 类。
    ipwx
        39
    ipwx  
       2017-01-28 12:24:23 +08:00
    @murmur 按照这个说法,人类对于环境也不过是个反馈系统,输出的是离散(现实世界不存在无限连续值)值而已。
    @lcqtdwj 从某种意义上人类的只能也不过是从观察到的数据中学习出来的。人类的推理本质也可以被贝叶斯公式概括。
    eric227
        40
    eric227  
       2017-01-28 13:20:06 +08:00
    我理解一个是 rule based, 一个是 data driven ,但都是工具;前一个需要稳定兼容,后一个需要不断学习提升,就像一个人的身体+脑子
    cpygui
        41
    cpygui  
       2017-01-28 16:20:04 +08:00 via Android
    @snnn 卧槽,说到心坎了。有好几篇 paper 的算法我怎么搞也弄不出来,后来都怀疑到智商问题了。还好我朋友提醒我有些 paper 有坑
    murmur
        42
    murmur  
       2017-01-28 17:54:23 +08:00
    @lcqtdwj 自动驾驶的永远不是技术问题,是法律问题,没有立法搞清楚机器人驾车把人撞了算谁的,谁敢上无人驾驶
    都以为是 B 公司用真人做 test case 啊
    viator42
        43
    viator42  
       2017-01-28 20:47:17 +08:00 via Android
    学起来需要姿势水平实在太高,入门的书都一大堆数学公式。
    taowen
        44
    taowen  
       2017-01-28 23:17:11 +08:00
    机器学习是需要大量离线和在线数据的。大部分搬砖的,就是把数据从一个地方搬运到另外一个地方。然后让这些数据更加遍历于在线和离线的机器决策。这就是一个搬砖的觉悟。
    minvacai
        45
    minvacai  
       2017-01-29 14:50:16 +08:00 via Android
    @viator42 其实我觉得神经网络入门涉及的数学不算很深,就目前来看就是普通的工科涉及的那些数学书而已,不过要在机器学习这一块有大的斩获的话数学应该是越精越好吧,早知现在会做码农的话当年专业就选数学了
    RockStar
        46
    RockStar  
       2017-01-29 20:35:19 +08:00   ❤️ 1
    我在机器学习研究生马上毕业了,说说法国的现状吧。现在做机器学习研究有两批人,一批是统计出身的,一批是计算机搞人工智能出身的,论出文章的数量和 citation 数量,统计出身是碾压计算机出身的。研究方向的话,我的老师都在 clustring 和神经网络。机器学习最后都转化为了 optimization 问题。本科学校时的大 boss 是 optimization 大牛,现在已成法国 svm 研究方向的领军人物。现在学过了机器学习之后,觉得这个学科对计算机出身的人并没有什么先天优势(我是计算机出身),比如物理出身的搞矩阵,做模型比计算机的有先天优势,现在机器学习语言 Python 和 R 学习曲线很友好,其他出身的很容易赶上来,而 R 语言对于物理出身的来说简直就是无缝衔接(语法很像 matlab )。对传统程序员的话,要补的东西太多了,矩阵,概率,统计,而每个机器学习模型后都是数学公式来定义的,补起来需要更长的时间。
    Izual_Yang
        47
    Izual_Yang  
       2017-01-31 16:40:40 +08:00
    @RockStar
    说到统计出身,我突然想起来王小波当年就是教统计学的,还能自己写程序
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   783 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 21:25 · PVG 05:25 · LAX 14:25 · JFK 17:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.