看开头,我以为是要做独立游戏咧。不过我预判你早晚要搞游戏的,哈哈。很欣赏你,可以做个朋友? UTogNzEwNTkgMTIwOQ== ,有空可以多交流。
可以,看到算法题的时候,我赶紧查了一下。哈哈。习惯性查答案。
至于学历,随便搞搞就能拿个非全日制本科学历吧。大专不够用。
用不到,然后忘了,那就搞个开源项目直接用新技术去做。连项目没有的情况下,当然学了就忘。效率为零。
公司项目如果让你练手,那你就在公司里用新技术。不让练手,搞开源项目呗,有啥的。
另外,做得深入一些了,自然就会涉及到各种原理性质的、算法性质,乃至数学相关的东西。自然就提升了。至于方向,要么做感兴趣的,要么做擅长的。如果没有感兴趣,也没有擅长的,只能说,不适合吃技术这口饭。
看完,个人觉得你不应该找 AI 技术合伙人。除非你很有钱,或者已经有融资了(那样也不会在这里找人了)。
应该找尽可能全栈的工程师。AI 方面可以调用别人的模型或者 API ,以出效果为主,不以调优为主。
行业方向上,先从工程和需求开始做,而不是从算法。主要是算法 ROI 比较低(主要还是投入大,产出小),调算法包则 ROI 比较高(调包当然容易了,同时出效果也快)。
不建议做自己想出来的新需求,除非你是多次创业者;建议从一些已经有的需求上做,然后用 AI 做微创新。
直接考虑用 AI 技术作为卖点下场,会有很多问题。在大部分实际需求中,AI 都是锦上添花,并非雪中送炭。没有基础功能需求支撑,基本做了也是徒然,竞争力弱,效果大概率跟做个好的 ppt 差不多。此外,要搞清楚你的产品是 2c 还是 2b ,2c 重点是怎么搞流量,2b 重点是怎么搞客户。不管是哪个,自己去研发行业模型都不是最重要的事儿。
AI 技术方面:搞 AI 需要数据,需要算力。人的方面主要是需要有经验的,或者足够聪明的。然后基本就是调参,根据结果来测试参数,不断调优,时不时看论文,用点新技术调优。问题是,数据算力其实都不便宜,做完之后的产出也仅仅是模型,离产品还有很大差距,大概是 1 分到 100 分的差距。并且,产出模型所需的时间并不稳定,取决于数据质量,算力多少,问题难度。而且每次调整,都不是那么可控的,玄学。所以你找了个 AI 工程师,大概率就是做了个模型,给你演示一下自己研发是啥效果,然后发现很难往下做了并且钱也没了。
我个人预判还能凑合跑一些图(仅仅做一些推断),但应该比较慢。
4070 ti super 我用着的话还可以,不过那个机器只用来跑图,不做别的。4090 ,我也入手了,4090 可以勉强做一些 LoRA 微调。主要点:机箱弄大点,方便后续添东西。电源功率高点,免得负载上不去。散热看情况弄,差了自然也是有问题的,不过那个主要看 CPU 负载。另外,GPU 卡都这么贵了,主板 CPU 内存也得上来吧,要不然 IO 方面的瓶颈或者 CPU 不够导致性能发挥不足,岂不是浪费。总之,照着 2 万以上来配电脑可能更加好一些,别想着太便宜了。(如果 4090 ,照着 2.5 万以上配吧)
至于全量训练啥的,就别想了,不是个人玩得起的,至少 8 卡吧。
我印象里,没有 main(当然动态库也有自己的 main),加上编译上带有--shared ,输出是 so ,就会形成动态库。其他主要就是写 makefile, cmake 之类的。好久没写了,我当年一般用 cmake 多一些,这样编译器标签什么的,基本都构建系统给你处理好了。就只需要项目编译组织对了就行,正确的添加好依赖,然后构建;一般项目应该都做好这些依赖的 link 配置了,当然 linking 出问题会比较麻烦,又很多细节,我也不展开说了,你可以先试试。
此外,.so 里面函数签名也有可能是麻烦的点,如果为了更好被别的语言调用,C 的封装接口更加易用一些( C++的 mangling 可能会导致查找符号上还挺困难的,但是如果项目本身是 C++的你会发现封装一层 C 接口也有不少工作量)。另一个常见做法是,在项目中添加比如 java 语言的头文件,然后对相关调用当前 java 提供的 native 函数进行封装,这样会直接导出 java 可有识别的函数。(我推测大概率可以,其他语言都有类似做法) java 的调用技术,应该叫 jni ?你可以自己多研究研究。我对 java 不太熟,只停留在表面使用。
我反正也是个分布式方面的外行,就随便说点自己想到的复杂性:
需要有除了操作以外的日志记录步骤,这样回退出问题可以检测到,并重新回退。然后加了这个步骤就成了 2pc 。
还有其他复杂的地方,比如每个 api 要保证幂等,api 之间的依赖。。。回滚过程中和其他事件的互斥,以及业务上怎么更好处理互斥,互斥带来的性能问题。然后就复杂了呗。本身锁的实现可能不复杂,怎么用锁才是复杂的根源。
有贷款有家要养 => 选钱多但不喜欢
选钱少但喜欢的 => 没负担
但是,下面不一定成立:
没负担 => 选钱少但喜欢的
因为可能没负担只是必要条件,不是充分条件。证明完毕。
之前 org-mode ,现在感觉就 txt 就可以了。
此外很多时候,会直接做成 ppt ,顺便给别人讲一波,感觉 ppt 记笔记也挺好,至少自己看着也容易懂一些。
所以目前是:ppt+txt 记笔记了。我觉得记个大概,然后附带一些网址链接。后续回顾的时候根据网址索引,这样比较有用。
脑图可能也有点用,但我不喜欢使。我个人觉得脑图更适合准备考试/面试之类的,根据脑图直接回想对应知识点。
如果是看书学习这种,我估计我还是会切换回 org-mode 这种吧。现在看书学习比较少了,大部分是看源码、看论文、看论坛、看技术帖子。如果是系统看书,可能还是记录功能更多更便捷的会好点;比如用 obsidian/org-mode (后者门槛有点高,还得上手 emacs ,不推荐新手。
没做过。看了一下技能要求,我感觉门槛不低呀。
算法要求比较杂:
- 图搜索 A*之类的,这种在游戏里面用的多一些,地图上寻路之类的。A*算法本身不太难,但这个方向还是有很多 heuristic 和 meta-heuristic 的优化,因此深入也可以很难。
- 强化学习 RL ,这个方向挺火,比如 chatGPT 训练的 RLHF 。理论较多,稍微难一些,整体来说我觉得学科还是比较新,很多时候难点还在于能不能优化出来。RL 和 CV 里的 GAN 类似。
- 滤波器,Kalman Filter, Particle Filter 。应该是控制里的一些算法,我记得 CV 里也有用,数学比较多,稍微难一些,tracking 方向。
- 控制方法:我会的也不多,我只用过 PID 。PID 比较简单,更高级的控制方法可能会难一些。
- 规划类算法: 基本即使运筹学上的,线性规划、整数规划等等的 。这块数学较多,较难。但用的时候就调包就完了。
- 曲线拟合: Bezier 之类的,这种比较简单,一般属于图形学几何的入门内容。入门级别比较简单,但深入很难。几何从来就没简单过。
- 轨迹采样 Lattice 。我不会,刚简单看了一下,基于 Frenet 坐标系的轨迹计算和采样,看起来涉及一些简单的微分几何知识,可能还涉及微分方程求解,我觉得应该会较难。
- 路径规划。难道是 TSP 和 VRP 这类么?求解基本就是一些 meta-heuristic 的方法:遗传算法、模拟退火等等的。
- 概率图 /Bayesian Network: 这块个人觉得数学挺多,较难。如果机器学习出身学过 PRML 的应该会比较熟悉了。求解方面 EM ,VI 等等技术。有的还会用 reparameterization trick 。做过 CV 如果深入研究过 VAE 这块可能也会,做过推荐如果用过 GNN 之类的相比概率图也有所涉猎。
- 优化: 入门简单,SGD 和一阶方法都不难,牛顿法也不难。但坑还是挺深的,数学较多,我评价也是较难。
- 机器学习: 这个你应该比较熟,不多说了。对新手学这方面,我觉得也是较难的。
- 状态机: 这个我不太懂,深入也有很多内容,编译器基本就是状态机,写一些分布式算法基本也是状态机。我觉得理解容易,实现挺难。
从上面要求来看,我觉得可能需要对某几个方面比较深入了解可能就够了。全会的人太少了吧。
从你的背景,我觉得机器学习、概率图、优化,这几个方向可能会的多一些。强化学习可能也会点。
会的方向强化一下,不会的其他方向可以入个门我觉得差不多能过面试了。毕竟看起来很多岗位也没给多少钱。
至于职业发展什么的,应该还好吧。看起来如果上面都掌握的人,应该还是哪儿都吃香的。
坐等行业里的大佬来回帖。我也学习学习。
虚拟机方案也用过,性能不太好。一些性能比较敏感的应用,调试可能都跑不起来。
远程服务器的话也是个方案,不过公网的机器都比较贵。但可以买个垃圾的公网云服务器,用 wireguard 做个隧道,穿透到内网。然后远程访问自己的服务器,这样也挺不错的。反正用 linux 主要也是命令行操作,有个终端也够用了。
忘了提一句了。mac 的话,跑 cuda 程序挺费劲的。这也是我不用 mac 的原因。。还有很多特别新的库和软件,mac 支持的都晚一些。另外我用 mac 总是找不到它安装东西到哪里了,很多打包在一起了,app 内部就是个文件夹....当然,linux 下的 snap 也类似。我不是特别喜欢这种。
我用 ubuntu 可能有 5-10 年了吧。基本原则就是:不用腾讯系软件,最多 web 版微信用一用。编程基本 emacs 和 vscode 。听音乐也直接浏览器打开听。输入法 fcitx 的 google 拼音(会在部分软件上有些问题,但我都解决了)。网盘百度云也用一用,但其实使用频率很低。。WPS 会用,另外 WPS 云文档基本保存了云文档。。
日常的话:
vscode 做开发。emacs 做笔记和 latex 文档。WPS 做做 ppt 。telegram 会用一下,部分技术群还是有干货的。翻墙 clash ,外加用了 clash-verge 做前端。
基本上用 linux 效率挺高。另外避免了 QQ 、微信这种时间杀手,效率更高了。
唯一麻烦就是腾讯会议,我基本手机参会。zoom 的话 linux 支持也挺好。
@
Allonsy 那个自学指南太棒了,我感觉自己找书也很困难,看这个整理得很全,而且一些我看过确实质量很高!
加强英语不错,不过 TOEFL 和 IELTS 考试费太贵,而且如果不申请出国我估计很多人都学不动。四六级先好好考过吧,然后尝试多听原版电影,听写台词,能听懂个 80%那些英语考试也差不多了,至少听力肯定够。
技术方面,关注原理吧,语言的话 C 应该就够了。要再学,我也不建议 go, rust 。建议 java, python/js 这种,不同类型的每个学一个:纯编译型、JIT 编译型、解释型。语言选流行的,选不流行的竞争不见得少,天花板可能还受限制。go 和 rust 虽然有越来越流行的趋势,但新手就别追趋势了,追错了多麻烦,就找当前最多用的语言就行了。而且这些用的多的语言,社区和依赖库建设也更完善,对新手更好点。
研究生最大的优势就是有证书吧。思维能力,这和是不是研究生没关系。
如果只是提高思维能力,自学达到教授水平都不成问题。
文献这东西,你读不懂就是基础没掌握好。
拿我熟悉的领域举例子,比如你读 ML/AI 方向的论文想做到复现论文,那有几个前置课程必须学明白了(倒不用很精通):微积分、线性代数、概率统计、多元统计分析、机器学习入门书(统计学习方法-李航、机器学习-周志华、ESL 、PRML 、MLAPP ,以上这些读 1-2 本)、深度学习神经网络相关一些补充资料。理论上这些掌握差不多了,动手上还需要你掌握一定水平的实践能力:c++、python 以及相关库 pytorch, tensorflow, caffe 等。到此,根据细分的研究领域,需要继续看几本书,比如 CV 需要看信号与系统、数字图像处理、一些研究方向的综述、以及深入用用 OpenCV 。上面基础都万事了,开始读入门级别的论文,比如 CV 方向,AlexNet ,BN ,ResNet ,RCNN ,Faster RCNN ,YOLO...,然后,可以跟进最新的论文,尝试复现了。
我其实觉得我上面说的方向难度还算中等吧,如果要搞高性能 AI 计算框架或者其他基础设施,技术路线就完全不一样了。编译原理、操作系统、汇编(类似 SIMD 、缓存等指令层面上的利用)、GPU 编程、分布式一致性算法等等。
总之,如果只是提升能力,你需要足够耐心,投入足够时间。
95%的工作用不上深入理解 GC 。但还有 5%的工作是需要理解的。
有 GC 的语言可能由于 GC 有 bug 、或者使用语言的写法是标准里未定义的,都会导致内存泄漏。
以此判断对某门语言花了多少心思,是有这方面考量。另一种隐含的考量是,是否一个人有机会接触到底层细节。一般来说,机会往往是:项目用得特性比较深入,技术含量高;个人自驱动强,不断加深深度触及到了底层技术。不管是那种,都应该是面试官更青睐的人选,后者尤其青睐。
简单点,天赋。
复杂点:
1. 知行合一:5 分行动,3 分学习,2 分深入思考,交替执行。具体到玩游戏上,玩 5 局,看别人讲解 3 局,对自己玩的两局深入反思,总结失败,总结成功点。(也就是上面有人说的,需要你足够“刻意”去玩)
2. 建立知识图:一般知识都可以按照树来组织。玩游戏也是一样,你讲的几个技术点都可以组织成树状,总结一下。比如,玩游戏玩得好,至少可以拆分成几个方面:基础操作技术(练习连招),情报能力(对数值分析),战局判断能力,等等的。拆分之后,每个环节可以具体练习,订立目标,能用数值上反应自己的进步。就好比上学的时候是考试,玩游戏,就是单位时间伤害啊、连招失误率之类的。
3. 合理添加训练。
不过按照上述方法玩,就算是游戏也没啥乐趣了吧。而且按照上面方法玩,你大概率比你同事进步速度还快,并能迅速达到业余高手级别。后续就是吃天赋的环节了。
至于为啥同事进步那么快,可能按照我说的 1 、2 模式来玩的,3 大概率没有,外加以前有相关游戏经验,外加可能有操作技术的天赋,综合来说,达到了很快进步。