《少年的你》碎念

2019-11-3 评论(1) 分类:随记

看电影《少年的你》,挺喜欢。

回想起来小学我也被打过几次,不过印象不是很深,也没那么夸张,小学时回家告诉了家人,然后去学校找了老师,后来怎样记不得了,但大家都表示出这是个麻烦事,老师更是在班上严肃地说没什么大事就应该自己搞定,不用搞得这么大,作为男孩,大家觉得被欺负还不能自己解决是丢人的。回想起电影里班主任离职时,说的话肯定是被审查过了,原版应该是一些尖酸怪罪的话。有多少老师能做到真正关心学生,而不是是不是给自己带来麻烦。

电影渲染了高考的恐怖氛围,比我们当时严重,但高考确实一直是我的噩梦,虽然我考得不错,但那段日子不堪回首,成年很多时候可以靠平时的成绩,而不是高考这样的一锤定音。高考是底层通往中上层走出去的几乎唯一通路,而底层的学生要克服的困难比中上层多得多,在学校受歧视欺负时的话语权,电影里没提到的教育资源的不足,思维惯性的缺陷,原生家庭可能的不安宁,甚至上学机会都没有。十年前有《我奋斗了18年才和你坐在一起喝咖啡》,现在依然一样。

电影表现出来的满满少年感,压抑的氛围中有美好和温暖,不知不觉已接近中年,少年的美好总是很能触动人。男女主角的表演看着特别高质量特别享受,敬佩这些演员,一直在感叹人与人之间的差距,天赋和努力程度都差距巨大,脑回路上的差距比社会地位上的差距更大。

保护世界看起来是个虚无宏大的事情,但这部电影确实能做到保护世界,把社会上一些不怎么被关注的问题放大成热门话题,多少正在受校园欺凌的人会感谢这部电影,虽然按网民惯性很快会冷却,但影响力在那里,跟《我不是药神》那样。期待有越来越多被公众误解或不关心的主题电影出现,像抑郁症,同性恋等。

另一种保护世界,就在我们日常工作中,经济增长是保护世界最有效的方式,商业创造出来的低门槛工作岗位,工厂,快递,外卖,能帮助多少家庭走出困境,多少小混混走上正轨,商业就是慈善。

程序员和工程师

2019-9-28 评论(2) 分类:随记

程序员和工程师是两个不同的角色。

程序员是创作者,作品的所有者。

工程师是工程的设计者,建设者。

公司里的职位是工程师,而不是程序员。

工程师是负责把公司产品打造出来的角色,涉及到方方面面的工作,写代码,架构设计,规范制定,质量保障,进度把控,方案权衡,制度建设,上下游沟通,多团队协作,业务理解,问题定义,中长期规划。

程序员则是更纯粹一些的角色,就是通过写代码进行创作的人,与作家、画家、木匠、铁匠类似的角色。

早期只有程序员没有工程师,因为程序是一批嬉皮士的玩物,还没进入工业化批量生产。

现在可能只有工程师没有程序员,程序成了工业化社会中的一环,现代软件产品大多都需要作为一个工程去由一个团队实现。

理论上程序还是可以脱离工程存在,作为一种创作介质,程序员可以独立创造属于自己的作品,它的自由度很高,可以是引擎,工具,语言,游戏等,但它的空间越来越小了。

在做工程师的同时,可以尝试保留程序员的角色,创造自己的代表作。

信息与思考

2019-6-12 评论(15) 分类:随记

在微博上看到蔡学镛发了句话:“你总是看大量的信息,你以为你热爱学习。但事实上,大脑本身就喜爱被信息刺激,这跟你是否热爱学习无关。真正判断是否热爱学习,要看是否喜欢动脑思考,大脑本能上并不喜欢思考,因为太消耗能量和时间。 ”觉得挺有道理,对于信息和思考,想再写两句。

我们每天摄入的信息是同质化的信息。无论是刷微博,头条,知乎还是抖音,在这些平台上能获得的信息都是同质化的,你会固定关注一群人,机器推荐也会推荐你喜欢的内容,固定的信息样式配合每天新发生的事情,看起来每天看到的是不同的信息,实际上是一套样式翻来覆去,并不能得到多少有价值的信息。

可以把世上的信息分成三种,第一种是直接以文字等形式在网上提供的信息。第二种是虽然相关资料在网上能找到,但需要自行进行加工处理才能得出有用信息。第三种是网上找不到,只存在于一些人的脑里的信息。

这三种信息稀缺性递增,价值也递增,第一种是当下最廉价的,价值也是相对较低的,而我们每天刷的就是第一种信息,而且是这种信息的一小部分。

要想获得更多有用信息,就要多获取第二种第三种。第二种靠思考和输出,对获取的信息多进行整合思考得出自己的结论,第三种靠人脉关系,很多时候关键信息都掌握在少数人手里,这些少数人并没有什么动力去把这些信息公之于众,需要多跟不同的人、重要的人交流和发生连接,获取只存在于他们大脑里的信息,这也是人脉的价值。

对于思考,王兴说:“多数人为了逃避真正的思考愿意做任何事情”,可能真是因为大脑思考太耗能量了,本能上不喜欢,思考如健身,要想长期保持或喜欢上思考,一靠习惯,二靠长期激励(对其带来好处的想象),三靠即时激励。若思考能经常即时带来好的反馈和刺激,可能有助于形成习惯,写博客这种古老的方式算是一种即时激励方式,把虚无缥缈的思考变成看得见的东西,有创作的感觉,满足表达欲,若其他人看到能有互动就更好了。

用户端智能的应用实践

2019-3-25 评论(5) 分类:技术文章

去年团队在用户端上进行了一些简单的智能应用探索实践,这里记录梳理下。

现在很多“智能”,是普通推荐算法借深度学习的风包装的,核心也就是决策树/随机森林/SVM这些90年代已经提出的算法,我们这里的实践也是这样。在用户端上,智能应用最广泛的目前两个点:个性化和多媒体识别,我们主要实践是在个性化上,从原来所有用户都用同一套或几套规则,换成根据推荐算法给每个用户制定符合他个性化特征的不同规则。

实际上简单的个性化推荐也可以认为是规则,只是这个规则很复杂,里面的if/else/权重/概率计算不是人工写的,而是算法算出来的,大多采用监督学习的方式,这种需求大体实现步骤是:

  1. 建模,把问题转化为三个点:输入/输出/算法。也就是挑选特征集X,确定输出目标值标签Y,挑选算法尝试找出Y=f(X)。
  2. 取数,选择一坨线上数据,清洗出需要的特征和对应的目标值。
  3. 训练,不断调整算法/参数/数据,找出用户特征->目标值的一个靠谱转化方式,输出一个模型。
  4. 应用,部署线上应用,实时预测,分析效果输入特征。

按这个套路,寻找了一些应用场景,做了一些尝试。

金额推荐

金额推荐概念很简单,我们作为理财业务,有很多场景是需要用户填入金额的,例如工资理财(每月自动把钱存到理财),小星愿(许愿存入钱),基金定投,各种理财产品的购买等。目前这些填金额的地方不是空着,就是有一个固定的默认值,金额推荐想根据每个用户的情况给推荐不同的金额,可以预填进输入框或出提示供用户选择,提升体验,甚至做出一些引导提升客单价。接下来套在上述步骤里来看下大致实施过程。

  1. 建模:
    • 输入特征基本上先拍脑袋尽量多的选取可能有关的特征,比如年龄,城市,过去交易金额等,后期训练迭代过程中会根据计算出的每个特征的重要性再进行几轮筛选。
    • 输出标签目标值是金额,但金额推荐这个需求不需要把每个用户的金额预测精确到个位数,从用户数据观察多数金额集中在有限的一些整数上(比如100/500/1000/2000等),所以这里只需要把金额分成一些档位,目标值是金额档位。
    • 算法,目标值是金额档位,是一个分类问题,分类算法中选用了随机森林这种集成算法,简单应用广,过程中也试过其他算法,效果差不多。
  2. 取数:
    • 进行一些数据预处理,例如把非数值类型的特征转为数值,合并特征和标签等。
    • 把最近一次交易金额转为对应金额档次分类作为目标值标签。
  3. 训练:使用第二步的部分数据进行训练,拟合出一个模型,再使用另一部分数据评估模型的预测效果。过程中通过各种调参/分析/数据处理,优化模型评估效果,例如:
    • 提升数据质量,筛选出过去购买金额有一定规律的人群数据,比如多次购买的方差不超过某个数值。
    • 参考随机森林特征重要性中的 entrophy gini 指数,去除重要性较低的特征。
    • 减少标签金额档次的个数,只保留多数用户会命中的几个档次。
  4. 应用:部署模型,不同的交易产品有不同的用法,可以把预测值直接预填进输入框,也可以在旁边出输入提示显示推荐的金额。然后就是一系列ABTest、性能优化、监控、数据效果分析的工作。

不同交易产品(工资理财/小星愿)对特征和标签的选取有一些小的不同,但大致处理流程一致。实践中工资理财把固定的1000元引导改成推荐的金额,订单平均金额提升60%32%用户直接使用了推荐的金额。小星愿把金额推荐作为提示供用户选择,相比直接放一个该用户历史交易金额作为提示,点击率高十几倍,用户对推荐金额的接受程度较高。

智能push

智能push想做的是在合适的时间给人推push,提高点击率。基于一个假想:每个用户都有不同时间段的活跃时间点,如果push不是统一固定时间下发,而是选择每个用户对应活跃的时间点下发,可以提高点击率。这里的push是促活类的,例如资讯的push。这里的问题可以转化为:怎样根据一个用户已有信息预测出他的活跃时间点。

  1. 建模
    • 输入,选取可能跟用户作息有关的年龄/收入/城市等基础信息,再加上用户过去7天的push点击数据作为特征值。
    • 输出,用户的活跃时间点,精确到小时,用户一天可能在多个时间点活跃,需要输出多个时间点。因为需求原因,push时间点限制在8-21点。
    • 算法,8-21点共14个小时,14小时->14个分类,多个时间点活跃->属于多个分类,是个多标签分类问题,我们用多个二分类的方式实现,同样用随机森林的算法,14个时间点每个点都单独做一次二分类,每个二分类的计算结果都是0-1之间的数,可以当成这个用户在这个时间点的活跃概率,最后合起来,得到每个时间点的概率。再根据指定阈值确定是否活跃时间点,例如:
      20190324164008
  2. 取数:
    • 对过去的push数据进行处理,根据8-21点每个时间是否有点击push,合成多条特征数据,取过去8天的数据,1-7天的数据作为特征,第8天的数据作为目标值标签。
    • 清洗用户基础特征,数据转换,拼接push特征。
  3. 训练:根据第二步的数据分14个二分类(14个时间点)训练,得到14个模型,每个时间点一个模型,最后合成一个。
  4. 应用:经过算法模型可以得到用户每个时间点的活跃概率,有多种使用策略,可以通过阈值得到几个活跃时间点,也可以直接选用概率最高的时间点,还可以在业务发送push时,往后选取概率最大的时间点发送,例如业务12点发送push,选12-21点之间概率最大的时间点,把push进队列延迟到该时间点发送。

同样是经过了多轮的数据分析、模型调整、特征优化、AB实验、Android分链路优化等,最终同一条push内容,使用智能push链路和普通链路直接推送相比,点击率稳定在提升25%左右。

本地处理

push的优化上当时我们想做更多,除了活跃时间段,实际上影响用户点击push的还有他当前手机的实时状态,例如是否在看视频/玩游戏/放在口袋里等状态,在这些情况下用户点击push概率一定很小,如果在收到push后显示前能实时检测到这些状态,就可以推迟到更合适的时间显示。为此我们在iOS上做了一些尝试:

  1. 需要在用户收到push后执行代码逻辑,再决定是否显示push,经调研 Notification Extension 没有取消展示push的能力,VoIP 需要特殊权限,只能用普通的静默push去做。
  2. 每条push都改成静默push,收到后唤起执行代码,经过各种判断后创建Local Notification,在指定时间展示push
  3. iOS 无法直接判断用户正在运行的程序和手机状态,只能通过一些侧面属性判断,包括横竖屏状态、耳机插入、内存情况、cpu情况、锁屏情况、网络状态这些信息,模糊猜测用户当前所处环境,给出一条运算公式计算用户当前是否适合展示push,公式可以动态下发,根据效果调整。
  4. 用户本地保存上面跑出来的每个时间点活跃概率数据,把push延迟到下一个较活跃的时间点显示。

Android 也实现了差不多的方案,不过iOSAndroid的方案都有缺陷,iOS方面用户手动kill掉的APP情况会收不到静默push,会影响push的到达率,Android方面没有可靠的延迟展示push手段,若延迟的时间点APP处于非活跃状态,会无法展示,同样也是会影响 push 到达率,这些缺陷导致最后本地处理的方案实现后没有很好地应用上。

其他

除了金额推荐、智能push,还做了一些其他智能的尝试,包括

  1. 智能异常检测:客户端的一些异常很多时候无法通过代码准确地检测到,例如图形引擎在一些安卓机器上的花屏,没有报错的白屏/黑屏,期望是有统一的手段检测到这些显示的异常。做法是在端上内置机器学习框架,云端训练模型,输入是截屏图片,输出是异常分类,我们挑了三种情况作为异常截屏样本:白屏/黑屏/花屏,做一个简单的图形分类模型,典型的深度学习cnn入门级项目,压缩模型下发到客户端运行,用户运行过程中根据一定的规则抽样进行截屏检测,有异常可能即上报。
  2. 股票OCR导入:自选股票从不同APP迁移时,需要逐个股票进行输入->搜索->添加自选,这里要做的是在应用A自选列表截屏,在应用B导入截屏,OCR识别出截屏上的股票代码。OCR是比较通用的识别能力,直接用现成模型,配合一些逻辑处理就能实现了。

还有像智能预加载/智能分页/交互预测/交易流失归因分析这些实践,但还没有做完整,就不描述了。

感想

  1. 当智能基础能力的基建(训练平台,模型部署,数据打标等)做好了,要把智能能力应用到业务上时,需要的更多是业务理解和数据分析能力,多数精力会耗费在清洗数据、模型调优上,这个能力跟工程能力有很大不同。
  2. 简单的“智能”需求,不需要理解具体算法实现也能做出来,只是理解了算法可能对优化有帮助。
  3. 机器学习算法繁多,与过往计算机通用经验复用度不高,要达到创造/改进算法的程度门槛太高。
  4. 用户端体验上的智能应用在多媒体、IoT、系统级优化上比较有空间,其他的并没有找到特别大的应用场景。
  5. 即使做了几个智能的应用,也没法说已经入门了这个领域,只是接触到一点皮毛,而且当时去补的各种知识点在一段时间没有接触使用后,也很容易就遗忘了。

绩效

2019-3-24 评论(4) 分类:互联网

一些公司会采取361的绩效考核方式,即30%优秀,60%普通,10%差。

这是一个三层阶梯的考核方式,它的问题是,梯度差太大,可能会造成不公平。

一般考核者会对团队每个人的贡献度/kpi完成情况/影响力/主观能动性等因素一起综合考虑,给出团队里的人员排名,再进行评定。

假设团队有10个人,当第三名与第四名差距很小,第九名与第十名差距很小,一念之间排名就会变化的时候,就会显得很不公平。

第三第四是综合评价差不多的两个人,却划分到差距很大的两档,第九和第十同理。而且,第四跟第九本来是差距很大的两个人,却在同一档,拿到差不多的评价和奖励。

另外一个问题,如果给人打1,这个人有可能会离开,但如果你对团队较满意,在市场上都很难招聘到比团队里靠后更好的人,那就是在浪费资源。

有没有别的方法?这里的问题是梯度差大,如果降低梯度差,比如分成10档,奖金的分配可以根据排名平滑地递减下去,会怎样。

这样刚才说的那种情况,第三四名,第九/十名之间,就算一念之间调换个位置,也不会有太大影响,第三档和第四档之间的奖金分配等差距很小,而第四和第九的分配差距是明显的,整体上是相对公平的(我们假设排名是公平的)。

但据了解似乎没有大公司采用这样的方式做绩效考核,为啥呢?可能因为太温和了,不刺激,不残酷。

这样的考核方式,难以激发进取心理和恐惧心理,多劳多得,少劳少得,没什么大不了。

排名靠前没有仪式感的激励,就像体育比赛没有金牌银牌,竞争性和冲劲会减少,排名靠后没有一个断崖式的差距,让人少了恐惧带来的狂奔。

没有具体的标签,在晋升淘汰等机制上也少了参考依据。档次过多,也会让人纠结于排名的次序上,难以解释。

从大盘上来看,绩效考核是为了激励员工把工作做得更好,公平性并不是最重要的,在大环境下要想拿到最大的公平,就是避免落入两档边缘,争取无可争议的第一。

其实体育比赛/招聘/竞标等很多事物都是这样,跃迁是这个社会竞争的普遍规则。

普陀山与佛教

2019-1-27 评论(3) 分类:随记

上个月去了普陀山,写下一些见闻和感想。

好的:

  1. 普济寺大堂里一群人念经,群诵经文听起来挺有感染力的,不断快速重复念经文,我理解是通过念诵让自己注意力不得不集中在经文上,多次重复后达到放空的效果,控制自己的思想去除杂念。
  2. 南海观音下面,有几个很像是西藏的喇嘛在打坐,独有的沧桑感和庄严感。
  3. 雕刻壁画、佛像特别多,作为外行人只看外表,大多数是很精美的。供奉的神明成百上千不重样,佛教感觉是特别复杂的宗教,听说佛法无边,修佛途径很多,所以创造出来的旁支很多,所以神佛特别多?
  4. 各路人过来烧香拜佛很多,年轻人也很多,看起来很虔诚。佛教有清规戒律,但给人印象却是可以保佑满足人们各种欲望的神佛,世俗上很实用。

不好的:

  1. 寺庙前面有人为商店拉客买香火,说“空手不入佛门”,让人特别反感的一句话,感觉是对佛教的亵渎。
  2. 普陀山交通极其不方便,出行只能靠走路和公交,没有汽车和单车,公交站的设计很奇怪,大多数站点设在离景点目的地五六百米,而不是直接设在景点旁边,让人怀疑是不是为了让人到站后走路过程中逛商店盈利。
  3. 除了交通外还有各种不方便,120块的入山门票,进入每个寺还要再排队买票,公交一小段距离要五块十块,全部不支持手机支付。
  4. 宰人店,之前只在网上听说,这次行程原因傻乎乎被一个人拉去饭店吃饭,体会到宰人的套路,菜单35块钱一份生蚝4只,结账时说他们标的是35块一只而不是一份,怒了,我说这样搞绝逼网上曝光报警,才给35元一份。之前听说在海南有几十块钱一只虾的宰客店,一模一样的套路。
  5. 无意中看到寺庙中的尼姑跟看门的人发火,凶神恶煞,一脸鄙视下人的样子,感觉对这些人来说,出家只是一份工作,跟平常人没区别,戾气都很重。

不懂佛教,带爸妈逛过很多寺庙景点,也只不过是看看样子,作为接受了多年唯物主义教育的人一直没有信仰,觉得那些“得道高僧”是装模作样糊弄大众,但最近觉得,虽然有些人确实是装模作样,但有些人“修成正果通往极乐世界”可能是真的。

人除了真正的温饱是物质需求,其他都是精神需求,住大房子、吃大鱼大肉、玩遍世界、子孙满堂、权力在握、家庭美满,虽然很多是跟物质相关,但实际都是精神需求,物质只是用来满足精神上的这些需求欲望。

佛教提倡只满足基本的温饱物质需求,住在清简的寺庙管温,吃最简单的斋饭菜管饱,其他需求全靠精神修行去满足。纯精神修行能做到什么程度呢,精神就是人脑,人脑可以控制自身的一切,例如困的时候,去想一些惊悚、愤怒之类的事情就可以立马让自己精神;做梦时经常在梦里可以随便串改记忆,可以很清晰“回忆“起某个事情,实际上它没有发生过;梦里还可以不借助任何物质外力直接达到性高潮。纯靠精神力量达到任意感受状态理论上应该是可行的,只是目前科学还未达到这种程度,不知道宗教的修行能达到什么状态,理论上都是可能的。