AlexiaChen.github.io
AlexiaChen.github.io copied to clipboard
My Blog https://github.com/AlexiaChen/AlexiaChen.github.io/issues
由于最近想预备升级windows 11(据说bug多,我会暂时等一等,这只是准备工作),发现11必须是UEFI启动,只能这么做了。 先要用win10自带的Disk partition工具查看一下引导卷是否是MBR,如果是就把MBR转成GPT的就可以。 具体来说就是CMD管理员权限运行: ```bash mbr2gpt.exe /convert /allowfullos ``` 成功后,重启电脑,然后进入BIOS设置启动模式,把legacy改成UEFI启动就可以了 参考以下: - https://www.maketecheasier.com/convert-legacy-bios-uefi-windows10/ - https://www.youtube.com/watch?v=0aRUXQz5ygc
发现开了v2ray代理翻不了墙了,apt update测试了下,我去,没网络连接了,所以DNS用不了,以前好好的。Orz。 通过这个issue 解决了 https://github.com/microsoft/WSL/issues/6404#issuecomment-963960301 修改`/etc/wsl.conf` 文件的配置: ```conf [network] generateResolvConf = true ``` 然后运行 `wsl --shutdown` 重启WSL2就可以了。windows 11真是小问题不断啊。
原因是我用gpload同步数据搭配GP中,需要根据日期分表来推送,所以需要在SQL字段的BEFORE字段下面运行CREATE TABLE语句,但是坑的地方是,这个CREATE TABLE 不起作用,其他的INSERT UPDATE DROP都可以起作用,所以gpload报错了,如下: ```txt 2022-02-23 15:31:25|ERROR|table XXXXXXXX does not exist in database postgres 2022-02-23 15:31:25|INFO|rows Inserted = 0 2022-02-23 15:31:25|INFO|rows Updated = 0 2022-02-23 15:31:25|INFO|data formatting errors...
用这个可以自动切换镜像源,一行命令就可以 https://github.com/wtklbm/crm ```bash cargo install crm crm best ``` 源码编译安装RA: ```bash $ git clone https://github.com/rust-analyzer/rust-analyzer.git && cd rust-analyzer $ cargo xtask install # Both server and code plugin $ cargo...
我已经发现好几个大佬都是抄书抄代码了。我自己也形成了一个习惯,发现好的代码原型,也是换一种语言复刻(抄),这样理解会越来越深。编译器大佬张宏波更习惯把代码用笔抄在纸上 ,只是我没有,我是换一种语言抄,并编译通过,加入单元测试 https://www.zhihu.com/question/21515496/answer/2468487175 我发现数学领域也有大佬这么干,比如日本著名的数学家小平邦彦(菲尔兹奖获得者),他喜欢抄书抄定理,抄证明,抄着抄着就忽然明白了。我也试过,我抄《线性代数应该这样学》就是抄了之后,对于某个点就不太会忘记了,因为你是边抄边思考理解甚边变查找资料把概念串联起来,你查资料的过程当中也是寻找更好的解释。https://zhuanlan.zhihu.com/p/35051858 所以从某个角度来说,翻译一篇英文经典技术文章,学术文章,也是类似不错的学习方法。区块链圈的密码学大佬也是这样的,翻译国外密码学大佬的文章,有些时候加入自己的备注理解,翻译V神的,或者翻译某某Lab的。我当然也翻译过其他的技术好文,也真有效果。 这样做的过程中,虽然很慢,但是理解也更深。正所谓慢即是快,快即是慢,特别是对于门槛比较高的领域是这样的。对于我这种笨蛋来说,这种学习方法至少是work的,而且很有效。   ## References - https://www.zhihu.com/question/306671491 - https://www.zhihu.com/question/24120340 - https://zhuanlan.zhihu.com/p/42755283 - https://www.zhihu.com/question/59132855/answer/489257085
简单来说就是library用thiserror这个crate, binary工程用anyhow这个crate。 library 一般是给外部调用,所以需要尽可能enum一个对外易懂的错误,因为library的错误是API的一部分,caller需要知道该怎么处理错误,是错误的消费者。所以对于library,尽可能不用这样的返回Boxed错误 `Result `, 目前就是用thiserror了,自己enum出来一些你自定义的Error返回出去,让caller方便处理。至于binary的话,因为再上一层就是终端用户了,用Boxed Error也是可以的,大部分错误都可以不用处理,而是打印日志或者弹出错误框什么的。 ## References - https://nick.groenen.me/posts/rust-error-handling/ - https://www.sheshbabu.com/posts/rust-error-handling/
项目地址在这里: https://github.com/AlexiaChen/nn-rs 其实就是为了让我了解神经网络的工作原理。目前兼职的公司也在搞AI,虽然是做AI应用(数据标注, langchain等),但是我自己本身还是想了解当今的AI的一些底层机制。无论是CNN, RNN, DNN还是当今的LLMs,底层都有神经网络这种计算结构的参与。所以学习AI,我觉得理解神经网络的机制,是一个绕不过去的坎。 其实原本用Python写会更简单的,因为有`numpy`,但是为了加深AI和Rust理解,还有强制逼迫自己熟悉Rust。而且Rust生态中,对于`numpy`也有简单的替代了就是`nd_array`。处理起来还算方便,支持向量乘以矩阵这些。一些基本的计算与`numpy`基本一一对应。 当然,性能估计没有numpy好哈,毕竟numpy的底层也是做了很多黑科技的优化的。这个不是语言的问题。 如果想继续了解神经网络,欢迎先看 https://github.com/AlexiaChen/AlexiaChen.github.io/issues/175 再看项目的代码和examples这样容易弄懂。
## 神经网络如何工作 ### 分类器和预测期并无太大差别 分类器其实就是在一个二维坐标系中,用一条直线 $y = kx + b$ 来分割不同类别的对象。这个可以很直观地理解。 如何得到正确的斜率呢?如何才可以改进划分两种不同类别的对象的分界线呢? ### 训练简单的分类器 其实就是不停地调节斜率这个系数k。调节系数通常为称作-学习率(learning rate)。调节斜率需要适度更新,限制错误样本的影响。 ### 有时候一个分类器不足以求解问题 之前提到的用一条线性分界线来分割目标是很理想的情况了,现实世界复杂多样。很多数据本身不是由单一线性过程支配。解决方法很容易,就是需要多个线性分类器来划分由一条单一直线无法分离的数据。所以人工神经网络就由此诞生了。神经网络是单一线性分类的复杂的扩展。 ### 神经元-大自然的计算机  本质上就是神经元之间互相连接,形成的一种可以处理复杂信息的计算模型。神经元之间有抑制机制。所以人工神经元也有了激活函数这样的抑制神经元输出的机制,比如Sigmoid函数和ReLU函数。Sigmoid在坐标轴上是一个S曲线,正好可以模拟大脑神经元的抑制激活功能 $$ Sigmoid(x) = \frac{1}{1 +...
服务架构是,gunicorn启动的WSGI server用Nginx做反向代理。 就是网络上说的Nginx + gunicorn + Flask的架构。 错误日志是: ```txt [2023-04-28 01:58:09 +0000] [11] [CRITICAL] WORKER TIMEOUT (pid:15) [2023-04-28 01:58:09,717] INFO in client: Got keepalive def03be1-9193-4219-be32-5c3caf806f6e in 10.36s Exception ignored in:...
包括从去年开始大火的ChatGPT,是LLM的成功应用。改变了人们很多工作方式。确实是人类一个里程碑式的进步。对于我这个不关注AI的人,也好奇了。当然,密码学,零知识证明这两年也是这样,以太坊二层网络zkEVM和zkVM的大规模落地,接踵而来的不同方式构造的zkSNARKs,一直在进步。让人无比焦虑,眼花缭乱,学也学不完。 其实对于个人的学习进步来说,也是一个阶段一个阶段的爆发的。当你积累了足够多的时候,在学习一些东西的时候会突然开窍。就比如我最近在学AI,打算自己动手写一个神经网络。这个在好几年前,为什么多层神经网络的计算用到了矩阵乘法,这个问题,我当时是理解起来不太自然的,现在看来,在理解了线性变换,线性空间后,其实就很自然。原因还是我这两年,先后积累了一些数学(线代,抽代),也亲自推导过一些公式,所以理解起来更加自然轻松了。人类的进程也是阶段式爆发,或许就是由于一个一个人类个体阶段爆发所形成的宏观现象吧。 学习抽象的东西,就像Deligne这个天才数学家所说的,理解抽象就是积累足够多的其对应的具体例子。然后就突然开窍了。Deligne很天才,积累了很多具体例子,所以别人在表述问题的时候,他大部分都可以在头脑中快速构造一个反例来推翻别人,其实在别人描述问题的时候,他的脑子就已经开始代入他积累的例子了。