xg1990

《简洁架构》读书笔记

  • by

架构解决的核心问题是在代码规模、人员规模扩大以后依然能够保持高效协作,不至于出现1+1<2的困境。 解决的办法通常是制定规范,约束行为,来提升协作效率。整个计算机的发展史都蕴含了这样的思维,例如计算机网络7层设计等。 架构思维反映在软件工程的方方面面,大致涵盖这几个维度: . 编程范式 . 代码设计 . 组件构建 . 软件架构 编程范式 不同的编程范式(过程式、面向对象、函数式)都是通过对编程模式的约束,实现更有效率的代码协作与管理。 过程式编程的核心是禁止使用goto语句,通过限制程序员对代码的直接控制权,大大提升了程序的可读性和可维护性 面向对象编程的核心是多态性,我们可以通过定义统一的接口(如C++的基类)实现在不影响核心代码的前提下以插件的形式快速扩展程序功能 函数式编程则是通过限制变量修改,实现模块的无状态化(例如云计算中的无服务)从而提升可维护性和横向扩展能力 代码设计 以上编程范式的设计内在理念都构成了如今普遍实践中的架构设计哲学:SOLID SRP单一职责原则:每一个模块应该只负责一类行为或者职责,避免过度耦合 OCP开闭原则:新增功能时应当最小化修改原有代码,实现插件式扩展 LSP里氏替换原则:类的继承需要确保子类能够正常实现基类所有接口,否则就不应当继承,或者重新设计基类 ISP接口隔离原则:任何模块都不要依赖他不需要的模块功能,带来不必要的运维复杂度 DIP 依赖反转选择:代码中抽象接口和具体实现之间需要明确边界,抽象接口被精心设计稳定不变,具体实现只依赖和调用抽象接口,代码依赖和控制流反向 组件构建原则 组件级别我们需要关注两组原则:组件设计原则与组件耦合选择 组件设计原则,回答哪些组件应该放在一起,包括: REP复用/发布等同选择:同一个组件中的模块因为紧密相关,应该共享版本号并被一起发布 CCP共同闭包选择:同一个组件中的内容经常需要一起变更,SRP的组件版 CRP共同复用原则:同一个组件中的内容经常需要被一起使用或引用,ISP原则的普适版… Read More »《简洁架构》读书笔记

数据团队建设的要点

  • by

本文来自一位DS前辈在LinkedIn上的工作总结 建设数据团队需要考虑的一些要点: 战略布局Strategy: 设计数据团队的发展战略(strategy)和路线图(roadmap),这是应该从第一天就开始做的事情 业务影响(Business impact):数据团队对于企业和业务部门的贡献应当能够用直观的数据(金钱、时间或其他KPI)表达出来,并作为重要的战略指标 团队建设: 在给定经费下,招聘合适的优秀人才入组 认真考虑每一个团队人才的个人发展目标 与所有的潜在候选人保持联系,如给失败的候选人成长建立 学会授权(delegation)与信任,避免事必躬亲(should work on things that only you can do) 技术基础设施建设: 数据产品的建设,为数据项目提供文档详尽、清晰可复用的数据产品,例如特征平台(Feature Store)、数据集市(data mart) 自动化运维(或DevOps)建设:在云平台或云原生(k8s)等设施上实现数据项目的自动化集成测试与部署 最佳实践(Best Practice):通过模版、文档等方式定义数据项目开展的标准化流程(Standard… Read More »数据团队建设的要点

关于人生管理的一些方法论

  • by

OKR 全称是「目标和关键成果」(Objectives and Key Results)(https://en.wikipedia.org/wiki/OKR) OKR框架可以细分成多个层级 North Start Ambition / Strategic Objectives / Objectives / Key results / Key Initiatives & Opportunities 教练式辅导: GROW成长模型:分别代表着Goal,Reality,Option,Will四个单词。其中,Goal即目标,教练通过一系列启发式的问题帮助被辅导者找到自己真正期望的目标;Reality即事实,围绕目标搜索相关事实,有困难,找资源,这个过程需要教练帮助被教练者拓展思路,找到超出自己目前所能看到的内容和纬度,发现更多的可能性;Option即选择,由于被教练者看到了更大的现实可能性,从而开启思路探索到更多的方案选择,从而比较找到最佳的方案;Will即意愿,教练者要采取更多方法激起被教练者充满热情地去行动,并予以支持和检查并进行阶段性的辅导,直到达到教练目的。 作者:商未央… Read More »关于人生管理的一些方法论

澳洲储备银行(RBA)对于房产可负担性与供应的调研报告

  • by

翻译自澳洲储备银行(RBA)在2021年9月的报告:Submission to the Inquiry into Housing Affordability and Supply in Australia的Executive Summary。原文连接:https://www.rba.gov.au/publications/submissions/housing-and-housing-finance/inquiry-into-housing-affordability-and-supply-in-australia/pdf/inquiry-into-housing-affordability-and-supply-in-australia.pdf 澳洲储备银行(RBA)认识到住房对澳大利亚人民的重要性。住房是人类的基本需要。能够获得适当的住房,无论是拥有还是出租,是政府政策的核心问题,多年来一直是数次调查的主题;RBA已经提交了之前的调查报告,这构成了本次调查的背景。所有人都能进入的运转良好的住房市场提高了福利,支持劳动力流动,促进了资源在各个经济体之间的有效分配。 政府政策(包括税收和监管环境)影响住房的需求和供应,进而影响住房的负担能力(Affordability)。这些政策可以产生增加需求的激励、阻止住房周转的交易成本或影响住房供应灵活性的法规。获得信贷也起到了一定作用,既影响到家庭借贷购买住房的能力,也影响到开发商根据需求变化扩大住房供应的能力。为了设计有效的政策干预措施,有必要全面了解影响需求和供给的各种因素。 本次提交的主要信息如下。 澳大利亚人口的住房负担能力各不相同,在过去十年中,不同群体的住房负担能力发生了不同的变化。 在许多(但不是所有)地区,房价相对于收入已经上涨。与此同时,利率长期处于低水平,这降低了借款人的偿债成本。对于那些希望购买房产的人来说,低利率、低收入增长和高房价中值的组合使得储蓄变得更加困难。 对于那些在租赁市场的人来说,公寓建设的大幅增加降低了在澳大利亚最大城市租赁公寓的成本,但在其他地方,大多数收入群体的租金都上涨了。 据评估,正在租房或打算买房的低收入家庭的负担能力下降幅度最大。 澳大利亚税收和转让制度的一些特点鼓励业主占用和投资房地产,并抑制流动性。这影响了住房和租赁市场的供需平衡,并可能对一些人造成负担能力压力。 监管的变化和建筑活动的其他驱动因素会影响新建住房的流动,而新建住房在任何一年中都只会逐渐改变住房存量。因此,即使是最灵活的建筑行业,对需求快速变化的反应速度也有限。 对新供应的响应能力的一些限制与澳大利亚的城市结构和地理位置有关。监管变化不太可能完全缓解这些约束。未来几十年供应面临的一个关键挑战是,如果大城市人口进一步扩大,家庭将需要居住在远离大城市中心的地方(需要新的基础设施投资)和/或接受更高密度住房的进一步增加。 其他法规和规划流程也可能得以简化,以使供应对需求的增长更为敏感。然而,这些条例中有许多是为了促进其他社会目标,例如确保建筑物的安全建造,以及确保邻近居民不会因没有征求他们的意见而承担费用和带来不便。 新冠疫情和应对新冠疫情的政策措施以多种方式影响了住房市场。例如,住房偏好的变化可能改变了某些住房市场住房供求之间的平衡。一些人的负担能力有所提高,而另一些人则有所下降。由于不清楚偏好的变化会持续多久,因此在评估任何未来政策变化时,可能存在比通常更大的不确定性。 为了应对负担能力下降,其他一些发达经济体已经寻求改善供需平衡,包括限制需求。… Read More »澳洲储备银行(RBA)对于房产可负担性与供应的调研报告

以数据为中心的机器学习

  • by

Andrew Ng 在今年6月举办了一场名为 Data-Centric AI Competition [1]的机器学习竞赛。和以往的机器学习比赛不一样是,这次比赛里模型训练由主办方提供且是固定不变的。参赛选手需要提供最优的训练数据集(最多10000份数据),让模型产生最优精度。这场比赛背后的用意是,目前机器学习模型已经相对成熟了,而对应的训练数据集的生成优化技术还相对落后。Andrew Ng希望通过这场比赛唤起大家对于数据重要性的认识。 数据清洗 一种比较成功的方案是使用Training Dynamics[2]的技术对训练数据进行分析。它对每一个训练数据定义了3个指标:correctness,confidence和variability。假设我们对模型训练了E个epoch,并记录了每个训练样本在正确标签下的分类概率变化序列(长度为E)。那么: Correctness定义为在E次训练中,这个样本被正确分类的次数 confidence定义为这个序列的均值, variability定义为这个序列的方差。 Confidence越接近1说明模型在整个训练过程中对于这个样本的分类都非常确定;variability高则说明这个样本比较模棱两可,但通过一段时间的学习确信度还是有很大变化的。最后样本可以分为三大类别: Easy-to-learn:高confidence,低variability。模型非常容易学习的样本 Ambiguous:中等confidence,高variability。模型比较难判断的样本,但通过学习可以逐步识别 Hard-to-learn:低confidence,低variability。模型非常难判断,这些可能是噪音数据或者错误标签 参赛队伍accademia_del_cimento 对于Hard-to-learn样本的处理办法是[3]:人工调整标注、清除高噪音样本、或者保持原状。最后根据样本的标签、confidence、variability、correctness进行分层采样,保证了训练样本的均匀覆盖。人工标注可以使用一些工具来辅助进行,例如TornadoAI[4],当然还可以用更成熟的工具比如LabelStudio [5]。 此外,也可以通过多个模型bagging的方法估计不确定性[6]并找到歧义样本。 数据增强 对图片数据进行数据增强是必备手段,可以使用工具如ImageMagick[7]进行数据增强。大量选手使用了python的影像数据增强库 imgaug[8],它可以自动对输入图像应用数十种常用的数据增强转化。对所有数据进行数据增强可能效果并不好,参赛队伍accademia_del_cimento发现只对部分人眼可以轻松识别的数据进行增强会更好[9]… Read More »以数据为中心的机器学习

个人投资笔记2021-09

  • by

基本原则与框架 长线投资:由于是非专业投资,不可能随时盯盘,无法进行中高频操作,因此需要把重点放在低频策略上 指数优先:避免投资个股,同样是考虑到精力有限,选择指数更加便捷。目前的大环境下,证券市场波动更多受到宏观经济的影响,个股的收益期望与指数差异不大 组合优化:通过不同资产之间的相关性进行组合,使用马科维茨的均值方差模型,实现期望-方差最优 框架思维:遵循以宏观分析为基础的思维模式。 站在巨人的肩膀上:了解知名投资机构的资产组合,从中学习 资源 研报库:hibor.com.cn 回测数据:https://www.akshare.xyz/zh_CN/latest/data/index.html 大厂观点: 贝莱德:https://www.blackrock.com/tw/insights/global-investment-outlook#asset-class-views 彭博:https://www.bloombergchina.com/blog/category/markets/ 罗素投资: https://russellinvestments.com/cn/global-market-outlook 宏观分析框架 美国美林时钟框架 关注经济增长与通胀 低增长低通胀->衰退->债券; 高增长低通胀->复苏->股票; 高增长高通胀->过热->商品; 低增长高通胀->滞涨->现金; 中国货币信用框架 宽货币紧信用->衰退->债券 宽货币宽信用->复苏->商品 紧货币宽信用->过热->股票… Read More »个人投资笔记2021-09

Terraform 的最佳实践

  • by

来自TechWorld with Nana[1]的视频[2] 1.   只使用terraform 命令更新状态文件 尽管terraform.tfstate文件是一个json文件,切忌直接编辑,否则会带来各种问题 2.   使用远程共享存储来保存状态文件 在合作环境下,如果任何人都可以执行terraform命令修改状态,那么很快状态文件就会出现不一致给资源管理造成混乱。 所有团队成员应该在同一个文件存储上共享状态文件(terraform.tfstate),例如S3,A Z Blob Storage或者GCS 3.   使用状态锁 哪怕状态文件保存在共享存储上,依然会出现两个人同时修改状态的情况,并造成事故。 解决方案时使用锁,确保任何时刻只有一个人编辑状态文件。 但这需要文件存储服务的支持。例如AWS S3支持通过DynamoDB实现文件锁 4.   备份状态文件 状态文件无比重要,因此需要注意随时备份。 如果使用云文件存储,只需要开启版本管理(versioning)即可随时恢复到任何历史状态 5.  … Read More »Terraform 的最佳实践

nocoDB初步测试总结

nocoDB (https://www.nocodb.com/)是最近开源[1]的无代码编程应用,作为Airtable的开源免费替代品,可以用来快速构建企业的后台信息系统。 类似的产品有Google的AppSheet和亚马逊的AWS Honeycode。不仅按人头收费,而且会带来深度的平台绑定。nocoDB作为开源产品个人认为很有潜力 基本功能 nocoDB本质上是一个基于关系型数据库的在线Excel 它虽然功能上比Excel弱很多,但是能够通过关系型数据库,满足许多协作场景的需要,比如数据权限控制、数据同步、审计,如下图所示: 然而截至目前(2021年8月),大部分的高级还未完成,可用性比较低。 通用API 考虑到大部分系统的后台主要工作就是进行数据的增删查改,nocoDB实现了一个通用API可以让任何三方系统对接数据库 这个通用后台提供了所有数据模型(表)的所有基本操作,用户在创建项目时可以任选GraphQL或RESTFul之一作为接口框架,并提供了完整的、自动生成的接口说明文档: 此外nocodb也提供了完整的API Token 管理系统,实现API的权限控制 系统架构 nocoDB 全部基于 nodejs开发,前端使用的是vue框架,后端(即通用API)使用express,所有模块都在同一个repo中实现; nocoDB使用knex进行所有的数据库连接,所以基本支持所有的数据库; nocoDB自己需要一个独立的数据库(也叫做「根数据库」)存储元数据(metadata),这个在系统初始化时创建,包如下表格: 系统初始化之后可以创建对外的三方数据库连接 部署 整个系统设计成了无状态的模式,所有需要存储的信息都保存在外部数据库里,所以nocodb可以非常轻易的部署在大部分环境里而不用考虑状态依赖。 官方推荐使用docker方式运行,部署在Heroku上 实测使用Google… Read More »nocoDB初步测试总结

《预测》读书笔记

  • by

0. 社会的不公 10%人掌握了社会90%的财富,对于这部分人而言,手中财富的极小部分才用来消费,而大部分用来投资或者储蓄,导致整个社会的大部分财富都处于投资或者储蓄的状态,使整个社会的消费需求严重不足,供大于求,经济增速放缓。 这是央行采取低利率高通胀政策的根源,但高通胀政策无法从根本上解决问题,它只是降低了富人的融资成本,加剧社会的分化,陷入恶性循环 这很可能会带来经济通缩完成更加严重的社会问题,而且大量的债务压力也需要通过通胀缓解 1. 百年变局 全球金融系统中最大的软肋:美元信用正在逐步走向崩溃。 美元信用建立在其稳定的价值基础上,但随着美国政府的无限PE ,美元的储值地位正在动摇。一旦爆发风险,全球金融体系都会面临崩溃。这些趋势很可能与作为避险工具的黄金的价格周期相互呼应 2. 市场可否预测 一个理性的投资者应当按照资产的实际价值进行买卖交易。但作为投机取巧的办法更多他那个投资者选择预估他人的估值,这就会把投资变成一场击鼓传花的游戏,把价格推到无线高,直到所有人冷静下来泡沫破灭 市场的走势由基本面的缓慢变化和市场参与者的大量随机行为构成。我们永远无法预测短期趋势,但长期来看股市的趋势总是向上的。 而这股向上的趋势终归会积累泡沫并破灭,因此更重要的是预测市场的泡沫破灭和拐点。而泡沫破灭的主要标志包括:极端的回报率,急速的换手率 3. 经济是否可以预测 『历史总是惊人的相似』反映在经济领域就是各项经济指标的周期变化 在一个周期内,相关的指标都会朝着相同的方向移动,通常也会存在一些前瞻性指标(比如地产业指数),优先于其他指标优先发生变化。例如铜价、木材价格往往能够作为经济领先指标。 在股票市场上,市场价格往往更多收到宏观因素的影响:现今现象是生产者价格指数 (PPI)波动要大于消费者价格指数( CPI),也就是意味着企业的成本控制能力很低,企业的盈利能力很大程度上取决于宏观货币供应。因此未来指数基金将主导市场,选股技术变得相对不重要,更重要的是对系统性风险的控制,也就是常说的黑天鹅或者灰犀牛 4.周期能否预测 经济周期理论认为周期有四个时间尺度 基钦库存周期:3到5年,一般取3.5年… Read More »《预测》读书笔记

[翻译]机器学习模型的对抗性攻击和防御

  • by

翻译自:https://arxiv.org/abs/1804.00097,并删减了过于细节的内容。对抗性攻击不仅涉及AI安全性,同时也是优化机器学习模型、避免过拟合的重要手段 0. 引言 机器学习和深度神经网络的最新进展使研究人员能够解决图像、视频、文本分类等多个重要的实际问题。然而,大多数现有的机器学习分类器非常容易受到对抗样本的攻击。一个对抗的例子是输入数据样本经过非常轻微的修改后,可以导致机器学习分类器对其进行错误分类。在许多情况下,这些修改可能非常微小,以至于人类观察者根本没有注意到修改,但分类器仍然会出错。 对抗性样本会带来安全问题,因为它们可能被用于对机器学习系统进行攻击,即使对手无法访问底层模型。此外,人们还发现即使是在物理世界中运行的机器学习系统,也有可能进行对抗性攻击,并通过不准确的传感器感知输入,而不是读取精确的数据。 从长远来看,机器学习和人工智能系统将变得更加强大。类似于对抗性样本的机器学习安全漏洞可用于危害和控制功能强大的AI。因此,对抗性样本的鲁棒性是AI安全问题的一个重要部分。 1. 对抗的例子 对抗性样本是机器学习模型的输入,这些模型经过有意优化,导致模型出错。如果输入样本是自然发生的样本,例如来自ImageNet数据集的照片,我们将其称为“干净样本”。如果一个对手修改了一个例子,意图使它被错误分类,我们称之为“对抗样本”。当然,对手不一定会成功;模型仍然可以正确地对对抗性样本进行分类。我们可以在一组特定的对抗性样本上测量不同模型的准确性或错误率。 2常见攻击场景 可能的对抗性攻击场景可以按照不同的维度进行分类。首先,攻击可根据对手期望的结果类型进行分类: 非目标攻击。在这种情况下,对手的目标是使分类器预测任何不正确的标签。具体的错误标签并不重要。 有针对性的攻击。在这种情况下,对手的目标是将分类器的预测更改为某个特定的目标类。 其次,攻击场景可以根据对手对模型的了解程度进行分类: 白盒。在白盒方案中,对手完全了解模型,包括模型类型、模型架构、所有参数值和可训练权重。 带有探测的黑盒。在这种情况下,对手不太了解模型,但可以探测或查询模型,即提供一些输入并观察输出。该场景有许多变体,对手可能知道体系结构,但不知道参数,或者对手甚至可能不知道体系结构,对手可能能够观察每个类的输出概率,或者对手可能只观察最可能的类的选择。 无探测的黑盒。在无探测的黑盒场景中,对手对受到攻击的模型的了解非常有限,并且在构建对抗性样本时不允许探测或查询模型。在这种情况下,攻击者必须构建对抗性样本,以愚弄大多数机器学习模型。 第三,可以通过敌方将数据输入模型的方式对攻击进行分类: 数字攻击。在这种情况下,对手可以直接访问输入模型的实际数据。换句话说,对手可以选择特定的float32值作为模型的输入。在现实环境中,当攻击者将PNG文件上载到web服务,并故意将文件设计为不正确读取时,可能会发生这种情况。例如,使用图像文件的对抗性干扰来逃避垃圾邮件检测器。 物理攻击。在物理世界中发生攻击的情况下,对手无法直接访问提供给模型的数字表示。取而代之的是,该模型由诸如照相机或微型手机等传感器获得的输入反馈。对手能够将物体放置在摄像机看到的物理环境中,或产生麦克风听到的声音。传感器获得的精确数字表示将根据摄像机角度、到麦克风的距离、环境中的环境光或声音等因素而变化。这意味着攻击者对提供给机器学习模型的输入的控制不太精确。 3. 攻击方法 3.1白盒数字攻击 L-BFGS L-BFGS… Read More »[翻译]机器学习模型的对抗性攻击和防御