xg1990

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 »[翻译]机器学习模型的对抗性攻击和防御

[翻译]TabNet-用于结构化表格数据的深层神经网络

  • by

原文链接:https://towardsdatascience.com/tabnet-deep-neural-network-for-structured-tabular-data-39eb4b27a9e4 在这篇文章中,我将向您介绍一个使用Google的TabNet解决分类问题的示例。 尽管最近针对图像、音频和文本的深度神经网络(DNN)出现了爆炸式增长,但使用良好的结构表格数据的任务似乎在某种程度上被忽略了。 虽然今天的许多数据确实是非结构化的(大约80%),但重要的是要正确认识到,用到行和列的数据中仅有20%仍然代表着巨大的数据量。事实上,在2020年,IBM估计全世界的数据收集量为35 zettabytes(或350亿TB)。 这意味着700000000000000字节的数据需要神经网络模型的关注! 平心而论,正如TabNet的原著所指出的,这是因为当前的集成决策树(DT)变体(XGBoost、LightGBM、CatBoost等)在表格数据方面比DNN有一些优势。 然而,自从TabNet发布以来,所有这些都消失了,它在多个基准数据集中的表现优于基于DT的模型。 弗雷明翰心脏研究 Framingham Heart Study 今天,我将介绍一个如何使用TabNet进行分类任务的示例。该数据集包含弗雷明翰心脏研究的结果,该研究始于1948年,对心血管疾病的风险因素提供了(现在仍然提供)重要的见解。对于那些有兴趣了解更多关于这项研究的人,请查看此链接。 如果您有兴趣了解更多关于TabNet架构的信息,我鼓励您查看我上面链接的原始文件。其他资源包括这个repo,您可以在这里看到原始的TabNet代码。最后,在我们深入讨论之前,您可以使用我的Notebook。 数据 该分析使用的数据由16个变量组成,包括目标变量ANYCHD。下面可以找到每种变量的说明。 调查缺失值 接下来,我想看看有多少数据丢失了。使用df.isnull().sum()很容易做到这一点,它将告诉我们每个变量缺少多少数据。另一种方法是使用missingno包,它允许我们非常快速地可视化缺失数据之间的关系。 在图1中,用变量表示缺失值(白色)的矩阵表示。这是按行垂直组织的,这允许我们查看缺少的值之间是否存在任何关系。例如,高密度脂蛋白胆固醇(HDLC)和低密度脂蛋白胆固醇(LDLC)的缺失值是相同的,这表明这些值并不是为该数据集中的一部分患者收集的。 我们也可以用不同的方法来观察缺失值之间的关系,如图2所示。在这里,我们更容易看到HDLC和LDLC与TOTCHOL之间的关系。值<1意味着它略小于1。由于这些变量中的al 3是胆固醇的测量值,这表明数据集中的某些患者没有收集胆固醇数据。 插补缺失值 现在我们已经收集了关于缺失值的信息,我们需要决定如何处理它们。根据您的数据,有许多选项,您可以在sklearn的网页上阅读更多有关各种插补算法的信息 我选择了KNN插补器,您可以使用以下代码实现它。总之,在第一块中,我简单地将数据划分为特征和目标。第二个块使用KNN插补器变换特征。从print语句中可以看出,最初估算的缺失值为1812个。 最后一步是分割数据。使用下面的代码,我最初将数据分为70%用于训练集,30%用于验证集。然后,我将验证集分成两个相等的部分,分别用于验证集和测试集。print语句为我们提供了有关拆分后的数据维度… Read More »[翻译]TabNet-用于结构化表格数据的深层神经网络

[翻译]大型企业如何进行分布式机器学习?

  • by

原文链接:https://thesequence.substack.com/p/edge74 大规模培训是在现实世界中构建深度学习解决方案最具挑战性的方面之一。正如一句古老的谚语所说,你最大的优点可以成为你最大的缺点,这当然适用于深度学习模式。整个深度学习空间之所以成为可能,部分原因在于深度神经网络能够跨GPU拓扑进行扩展。然而,同样的扩展能力必然需要计算密集型程序的开发,这对大多数组织来说是操作上的挑战。从训练到优化,深度学习项目的生命周期需要强大的基础设施构建块,以便能够并行化和扩展计算工作负荷。虽然深度学习框架的发展速度很快,但相应的基础设施模型仍然相对较新。在过去的几年里,科技巨头谷歌、微软、Uber、DeepMind和其他公司定期公布各自的努力,以便在大型GPU基础设施上实现深度学习模型的并行化。 分布式计算和并行计算的原理几乎贯穿于深度学习程序生命周期的任何阶段。 训练一个深度学习模型可能是一个非常昂贵的事情,它的执行也是如此。显而易见的方案是利用大型GPU网络来分配深度学习项目的工作量,但这远不是一件容易的事。并发和并行编程是出了名的复杂,当应用于大型神经网络时更是如此。大型科技公司每天都要面对这些挑战,因为它们为任务关键型应用程序操作极其复杂的深层神经网络。本文回顾一下Google、DeepMind、Microsoft和Uber使用的一些顶级体系结构,这些体系结构用于并行化大规模深度学习模型的培训: Google GPipe  Uber Horovod  DeepMind TF-Replicator  Microsoft DeepSpeed  Google’s GPipe  GPipe专注于扩展深度学习项目的训练工作量。从基础设施的角度来看,训练过程的复杂性是深度学习模型经常被忽视的一个方面。训练数据集越来越大,越来越复杂。例如,在医疗领域,经常会遇到需要使用数百万高分辨率图像进行训练的模型。因此,训练过程通常需要很长时间才能完成,导致内存和CPU消耗非常昂贵 深度学习模型并行性可以分为数据并行和模型并行。这数据并行性这种方法使用大型机器集群来分割输入数据。 模型并行性 尝试将模型移动到加速器上,例如GPU或TPU,这些加速器有特殊的硬件来加速模型训练。在较高的层次上,几乎所有的训练数据集都可以按照一定的逻辑进行并行化,但是对于模型却不能这样。例如,一些深度学习模型由可独立训练的并行分支组成。在这种情况下,经典的策略是将计算划分为多个分区,并将不同的分区分配给不同的分支。然而,这种策略在按顺序堆叠层的深度学习模型中存在不足,这对有效地并行计算提出了挑战 GPipe通过一种称为流水线的技术将数据和模型并行性结合起来。从概念上讲, GPipe是一个分布式机器学习库,它使用同步随机梯度下降和流水线并行进行训练,适用于任何由多个连续层组成的DNN。 GPipe将一个模型划分到不同的加速器上,并自动将一个小批量的训练示例分割成更小的小批量。此模型允许GPipe的加速器并行运行,最大限度地提高培训过程的可伸缩性。 下图说明了GPipe模型,其中一个具有连续层的神经网络被划分为四个加速器。Fk是第k个分区的复合正向计算函数。Bk是相应的反向传播函数。Bk依赖于上层的Bk+1和Fk的中间激活函数。在顶层模型中,我们可以看到网络的连续性如何导致资源利用不足。下图显示了GPipe方法,其中输入的batch被划分为更小的batch,这些batch可以由加速器同时处理。  Uber Horovod  Horovod 是在社区中非常流行的uberml栈之一,并已被DeepMind和OpenAI等人工智能强国的研究团队采用。从概念上讲, Horovod是一个大规模运行分布式深度学习训练框架。 Horovod利用消息传递接口(例如 OpenMPI )使模型训练能够在高度并行和分布式的基础设施上运行,而无需任何修改。在Horovod运行分布式TensorFlow训练可通过四个简单步骤完成:  hvd.init() 初始化Horovod.  config.gpu_options.visible_device_list… Read More »[翻译]大型企业如何进行分布式机器学习?

Python进阶笔记:从实验室到生产环境

  • by

从笔记本(notebook)到命令行 大多数python初学者都喜欢使用jupyter-notebook写代码。Jupyter-notebook的开发环境非常友好,所见即所得,可以快速测试一些短代码进行概念验证。但是它存在很多问题:不可测试、不可模块化、难以复用、难以进行版本管理…… 一个生产可用的python项目应当以命令行为入口,通过执行脚本实现所有设计功能。任何需要传递的参数和选项也应当以标准的命令行传入给程序,然后通过python的sys库读取。实践中更多的是使用click库[1]来处理命令行的数据交互。 代码风格 一致的代码风格对于代码共享和团队协作至关重要。Python官方有PEP8文件[2]提供完整的代码风格指南。一般的项目一般会使用以下任一工具来进行代码风格检查: Pylint:https://github.com/PyCQA/pylint Flake8:https://github.com/pycqa/flake8 以上检查工具都会对代码进行打分,一个企业级高质量python项目应当力争在代码风格上完全遵守PEP8代码规范 此外以上代码风格检查工具都提供了自动格式化功能帮助处理常见的格式问题,但功能并不完善; python代码格式化工具Black(beta公测中)可作为更好的选择: Black:https://github.com/psf/black 显式类型声明 尽管python是一个弱类型语言,我们可以任意改变变量的类型而不受任何限制。然而,这种自由度会严重损害代码的可读性。为了促进协作,提升代码可读性,编写代码时应当尽可能的显式声明所有变量类型。Python官方提供了PEP 484 — Type Hints[3]来规范代码中类型标记的使用,同时我们可以使用mypy工具进行类型检查 Mypy:http://mypy-lang.org/ 代码文档 企业级环境下一定会有许多可在项目间复用的代码,这些代码需要有详细的使用文档才能够保证团队的无障碍使用,python官方提供了PEP 257 — Docstring Conventions[4]作为代码注释的标准规范,同时我们也可以使用pydocstyle工具进行注释规范强制检查: pydocstyle:… Read More »Python进阶笔记:从实验室到生产环境

WordPress 修复 Sorry, you are not allowed to access this page (抱歉,您不能访问此页面) 的错误

  • by

最近配置一个新的 wordpress 时遇到了无法登陆管理页面的问题,报错信息为:Sorry, you are not allowed to access this page / 抱歉,您不能访问此页面 我的环境设置为:使用docker运行Wordpress,主机使用nginx服务器的proxy_pass指令将外部访问转发到docker 容器的端口。同时服务器的nginx使用了certbot来管理SSL证书,所有http访问都会重定向到https端口 出现「Sorry, you are not allowed to access this page」与SSL有关,搜索了很多帖子后,有效的解决方案是在wordpress的配置文件wp-config.php中增加以下配置: 同时务必确保这段配置在wp-config.php文件的最开始部分(也就是… Read More »WordPress 修复 Sorry, you are not allowed to access this page (抱歉,您不能访问此页面) 的错误

大型企业的机器学习模型管理流程

  • by

随着人工智能和机器学习应用范围越来越广泛,大量的企业会将各种机器学习模型部署到生产实践中。在技术驱动型的中小型企业中这是一件相对容易的事情,因为没有繁琐的流程、利益冲突和监管限制,通常能够很容易的推动新技术的应用。 然而在大型企业中,机器学习的实践远没有小企业那么简单快捷,涉及到数据、模型验证、商业价值、隐私、伦理、安全等等诸多因素,因此需要一套标准流程来统筹兼顾。这个流程通常包括这些内容: 立项阶段 商业价值分析:(分析模版:需要明确这个模型能够带来的利益,整个项目是否成功的标准能否量化,对现有方案的提升程度,给谁带来利益) 可行性分析:数据是否可以获取、质量是否足够 风险分析: 数据隐私分析:涉及到的数据是否敏感(如涉及个人隐私),是否有相应的措施降低数据泄漏风险,增强隐私保护 伦理分析:所使用的模型是否会带来歧视、不公平等道德问题 其他可能的政策风险 项目管理计划:明确交付成果、交付对象、完成时间、经费来源、团队人员分工,需要哪些外部团队合作 启动阶段 分配计算机资源(计算集群或者云计算服务器),并明确回收时间 准备数据: 授权数据权限(这里需要IT部门架设安全的隔离环境来处理敏感数据) 建立管道 检查数据质量:缺失值、数值单位、数据类型、定型变量检查、重复值、异常值、bias、 数据伦理:少数群体的数据量是否充足、是否存在敏感的个人信息(年龄、性别、种族、信仰、健康状况、国籍……) 开发阶段 数据探索性分析 (EDA) 模型选择与训练 特征管理 超参数优化 交叉验证:是否存在数据泄漏,overfit或者underfit,是否对于某些具有特殊属性的样本精度明显偏低 模型解释:各个特征对于输出结果的影响是否合理,是否包含敏感数据(性别、年龄等)… Read More »大型企业的机器学习模型管理流程

投资澳洲住宅物业的风险因素清单

  • by

银行的房产估值流程: 自动估值:Automated valuation models 使用自动化软件估值;如果存在争议或者模型认为有较大不确定性,则进入下一阶段 桌面人工估值:Desktop,人工查阅物业信息进行远程估值;如果存在争议或者有风险因素则进入下一阶段 专家前往路边估值或室内估值 考虑的风险因素 因素类型 细节 位置 是否靠近工业区(特别是主要工业区)周边是否有生活设施(如超市、购物中心)是否是古迹 Heritage 土地 交通可达性(地铁、公交、高速公路……有些地区只能通过轮渡到达)当地土地规划是否合适土地坡度是否过大(施工困难) 环境 是否有土壤污染(site contamination 如曾为landfill 或者工业用地)、是否有放射性污染是否靠近高污染类工业区地质结构是否受到采矿等工业活动影响是否有电线经过是否有机场、主干道、火车线、交通噪音是否有电线、电站等是否是洪水、bushfire 危险区可用面积被easement显著降低 修缮 石棉严重的建筑问题(特别是公寓,例如可燃外墙材料问题)是否符合建筑规范(如层高)是否有损坏(水火虫)建筑是否太靠近土地边界室内面积小于50m2 市场 价格剧烈波动(上or下)近期没有交易记录难找到买家(交易时间长)虚高的合同价格外部(外地人or海外)投资人较多… Read More »投资澳洲住宅物业的风险因素清单

高质量睡眠建议

  • by

最近从《睡眠革命》这本书开始关注高质量的睡眠方案,可笑的是最后发现此书核心理论R90没有任何坚实的研究基础[1],不必认真看待,但书中关于睡眠环境的一些安排仍有可以借鉴之处。与其看这种畅销书,一些权威的医疗机构(比如克利夫兰诊所,梅奥诊所,哈佛医学院,麻省总医院)汇总的睡眠建议其实更加可靠一些,这里把调研把搜集到的一些结论整理如下 规律作息: 在同样的时间入睡和起床,包括周末和假期🟠🟢🔵🟣 每日按时起床是最简便的控制节律方式🔵 使用灯光唤醒🔵 每日规律活动(如吃饭、锻炼、暴露日光)🟣 锻炼:   每日锻炼,但不是睡前🟠🟢,最好在早上🔵 每日户外活动对睡眠有帮助🟢 饮食:   中午以后避免咖啡因、尼古丁、酒精🟠🟢🔵🟣 不要空腹或饱腹入睡🟢🟣 太饿可以少量吃一点乳制品或者碳水🔵 日间多饮水,但睡前避免饮水🔵 午休:   避免超过30分钟🟠🟢🔵 且不要在3pm以后午休🟠🟢🔵🟣 舒适的睡眠环境:   舒适的床和枕头🟠🔵 无光、噪音干扰、温湿度合适🟠🟢🔵 考虑使用风扇、耳塞、眼罩等工具调节环境🟢🔵… Read More »高质量睡眠建议