作为一个普通的程序员,到底应不应该转型AI工程师?

2023-05-16

动不动就是50万的毕业生年薪,动不动就是100万起步价的海归AI高级人才,普通员到底应不应该转型AI工程师,普通程序员到底应该如何转型AI工程师?

下面就分享几个特别典型的普通程序员成功转型AI的案例

第一个案例

是只懂 ACM 竞赛相关算法的普通程序员,误打误撞接触到了数据挖掘,之后开始系统地了解机器学习相关的知识,如今已经基本走上了数据科学家之路的经验分享。

第二个案例

是其他行业的普通程序员,具有计算机专业的人所没有的专业知识和行业大数据,他只是想把深度学习和神经网络当作工具,知道它们能做什么,如何去做。这类程序员经过4个月的转型学习,他们的经验和体会。


案例一

我曾经也只是一个只懂 ACM 竞赛相关算法的普通程序员,误打误撞接触到了数据挖掘,之后才开始系统地了解机器学习相关的知识,如今已经基本走上了正轨,开始了走向 Data Scientist 的征途。

首先作为一个普通程序员,C++ / Java / Python 这样的语言技能栈应该是必不可少的,其中 Python 需要重点关注爬虫、数值计算、数据可视化方面的应用,主要是:

如果日常只编写增删改查的代码的话,那可能数学已经忘得差不多了,需要重温线性代数和微积分的基础知识,这会为之后的学习立下汗马功劳。

再然后就是统计学相关基础

相关性分析(相关系数r、皮尔逊相关系数、余弦相似度、互信息)

  • 回归分析(线性回归、L1/L2正则、PCA/LDA降维)

  • 聚类分析(K-Means)

  • 分布(正态分布、t分布、密度函数)

  • 指标(协方差、ROC曲线、AUC、变异系数、F1-Score)

  • 显著性检验(t检验、z检验、卡方检验)

  • A/B测试

如果以上知识都具备了,再往后的路就可以开得很快了,可以一直冲刺到 Deep Learning。但在这之前我们还是需要了解不少机器学习的基础:

  • 关联规则(Apriori、FP-Growth)

  • 回归(Linear Regression、Logistics Regression)

  • 决策树(ID3、C4.5、CART、GBDT、RandomForest)

  • SVM(各种核函数)

  • 推荐(User-CF、Item-CF)

此时的你或许已经有一块可以用的敲门砖了,但离工业界实际应用还有比较大的距离,主要差距就在于 Feature Engineering,这也是我在面试考察有经验的人面前比较注重的点。

这一块中有一些比较基础的知识点,简单罗列如下:

  • 可用性评估:获取难度、覆盖率、准确率

  • 特征清洗:清洗异常样本

  • 采样:数据不均衡、样本权重

  • 单个特征:无量纲化(标准化、归一化)、二值化、离散化、缺失值(均值)、哑编码(一个定性特征扩展为N个定量特征)

  • 数据变换:log、指数、Box-Cox

  • 降维:主成分分析PCA、线性判别分析LDA、SVD分解

  • 特征选择:Filter(相关系数、卡方检验)、Wrapper(AUC、设计评价函数A*、Embedded(L1-Lasso、L2-Ridge、决策树、DL)

  • 衍生变量:组合特征

  • 特征监控:监控重要特征,fa特征质量下降

我放一张公司内部算法培训关于特征工程的 PPT,仅供学习参考:

再往后你就可以在技能树上点几个酷炫的了:

  • 提升

  • Adaboost

  • 加法模型

  • xgboost

  • SVM

  • 软间隔

  • 损失函数

  • 核函数

  • SMO算法

  • libSVM

  • 聚类

  • K-Means

  • 并查集

  • K-Medoids

  • 聚谱类SC

  • EM算法

  • Jensen不等式

  • 混合高斯分布

  • pLSA

  • 主题模型

  • 共轭先验分布

  • 贝叶斯

  • 停止词和高频词

  • TF-IDF

  • 词向量

  • word2vec

  • n-gram

  • HMM

  • 前向/后向算法

  • Baum-Welch

  • Viterbi

  • 中文分词

  • 数据计算平台

  • Spark

  • Caffe

  • Tensorflow

可以看到,不管你是用 TensorFlow 还是用 Caffe 还是用 MXNET 等等一系列平台来做高大上的 Deep Learning,在我看来都是次要的。想要在这个行业长久地活下去,内功的修炼要比外功重要得多,不然会活得很累,也很难获得一个优秀的晋升空间。

最后,关注你所在行业的最新 paper,对最近的算法理论体系发展有一个大致印象,譬如计算广告领域的几大经典问题:

相关 paper 的 gitlist 仅供参考:wnzhang/rtb-papers - https://github.com/wnzhang/rtb-papers

最最后,也要时刻关注能帮你偷懒的工具,它将让你拥有更多的时间去调参: Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱 - Python

温馨提示:想转型的可以加入群:671017482,等着你


案例二

说说我学习深度学习的经历吧

先说编程:自认会用C++, 熟悉Python

英语水平:中等,能很快读懂英文科学文献

最开始对人工智能/深度学习感兴趣是因为想用它试一试自然语言生成,后来想到一个物理方面的题目,预计可以用深度学习技术解决,开始接触深度神经网络。记录一下学习历程,

安装 Tensorflow(google 开源的深度学习程序), 尝试里面最简单的例子MNIST 获得激励。

尝试通过读书(看视频)理解最简单的全连接神经网络

先搜索找到答案:为什么要Go Deep?

  • 神经网络中输入层,隐藏层,输出层之间矩阵乘积的维度变化。

  • Weight, Bias 这些是什么,改变它们有什么结果。

  • 激励函数是什么,有什么作用,有哪些常用的激励函数

  • 误差如何向后传递,网络如何通过最小化误差函数更新,有哪些常用的优化方法

选择一种比较比较底层的神经网络开源库,tensorflow 或 theano

  • 读官方文档 https://www.tensorflow.org/versions/r0.11/tutorials/index.html

  • https://www.tensorflow.org/tutorials/

  • 看周莫凡的网络教程 https://www.youtube.com/user/MorvanZhou

  • https://www.youtube.com/user/MorvanZhou

  • 重复敲代码,重复实现例子程序

开始理解各种不同神经网络架构所能处理的问题

  • CNN 图像识别,图像处理,语音处理

  • RNN,LSTM 自然语言理解与生成

  • 增强学习,玩游戏

尝试各种开源的有意思的神经网络项目,新手可以从下面这个列表开始

  1. Andrej Karpathy blog char-rnn, Deep Reinforcement Learning: Pong from Pixels- http://karpathy.github.io

  2. Neural Style In tensorflow - https://github.com/anishathalye/neural-style

如果能翻墙,注册 twitter, facebook 账号,follow 那些文章中经常出现的大牛的名字。

他们每天提供很多新动向及最新技术,很多时候有很 Fancy的应用。

当你对这些都很熟悉的时候,开始阅读艰深的文献:

  • CNN 的原始文献

  • RNN 和 LSTM 的原始文献

  • Reinforcement Learning 的原始文献

  • Google DeepMind 发表在 Nature 上的几篇经典

最后强调一个最最重要的事情:要有自己的想法,有将这种新技术用到自己项目中的强烈愿望,从开始就要Coding,不断尝试才能不断进步。


你是属于哪类程序员呢?他们的经验你又是否能用上呢?

你是否想要转型?如果你想的话,可以加入我的qq群:671017482,希望可以给你一些帮助和建议。记得点个关注哦

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

作为一个普通的程序员,到底应不应该转型AI工程师? 的相关文章

  • c语言中 char* 和 unsigned char* 的区别浅析

    背景 最近在项目中遇到了一个编译警告 xff0c 是因为定义的变量为char xff0c 而在使用时作为函数的unsigned char 类型的参数调用 这个警告很容易避免 xff0c 但是char 和unsigned char 到底有什么
  • c语言中static关键字用法详解

    概述 static关键字在c语言中比较常用 xff0c 使用恰当能够大大提高程序的模块化特性 xff0c 有利于扩展和维护 但是对于c语言初学者 xff0c static由于使用灵活 xff0c 并不容易掌握 本文就static在c语言中的
  • linux下把进程/线程绑定到特定cpu核上运行

    概述 现在大家使用的基本上都是多核cpu xff0c 一般是4核的 平时应用程序在运行时都是由操作系统管理的 操作系统对应用进程进行调度 xff0c 使其在不同的核上轮番运行 对于普通的应用 xff0c 操作系统的默认调度机制是没有问题的
  • git中submodule子模块的添加、使用和删除

    背景 项目中经常使用别人维护的模块 xff0c 在git中使用子模块的功能能够大大提高开发效率 使用子模块后 xff0c 不必负责子模块的维护 xff0c 只需要在必要的时候同步更新子模块即可 本文主要讲解子模块相关的基础命令 xff0c
  • ros下package中CMakelists的编写

    目录 一 package自动生成的Cmakelists1 指定cmake版本2 项目名字3 寻找构建所需依赖包4 启用python模块依赖5 Message Service Action 生成文件6 启动 message services
  • STM32跳至硬件错误中断(HardFault_Handle) 原因及参考解决方法

    一 HardFault Handle引起的原因 1 遇到错误问题是数据类型不对 xff0c 导致该步骤永远不能执行到 xff0c 跳至硬件错误中断 xff1b 所以硬件中断可尝试查找数据类型错误 2 堆栈设置错误也会跳至hardwarefa
  • 时间与日期插件 -- laydate 使用方法(摘自官网)

    简单例子 xff1a function var start 61 elem 39 start 39 选择ID为START的input format 39 YYYY MM DD hh mm ss 39 自动生成的时间格式 min laydat
  • nginx部署vue项目(包括一个nginx部署多个vue项目)

    部署准备 vue项目打包 首先打开public下的index目录 xff0c 修改后台的URL地址 xff0c 如下图所示 xff1a 使用CMD xff0c 打开命令行程序 进入项目根目录 执行命令 xff1a npm run build
  • 雅可比(Jacobian)矩阵

    在向量分析中 雅可比矩阵是一阶偏导数以一定方式排列成的矩阵 其行列式称为雅可比行列式 还有 在代数几何中 代数曲线的雅可比量表示雅可比簇 xff1a 伴随该曲线的一个代数群 曲线可以嵌入其中 它们全部都以数学家卡尔 雅可比 Carl Jac
  • 粒子滤波方法入门

    例子滤波方法入门 xff1a 分析典型非线性系统数学模型 主要内容 xff1a 1 非线性数学模型 2 用粒子滤波的MATLAB程序简介 1 非线性数学模型 2 用粒子滤波的MATLAB程序简介 function output args 6
  • 关于VIO中IMU预积分的讲解

    Why VIO 转自 xff1a https zhehangt github io 2019 03 23 SLAM Basic VIOInit 首先我们先简单回顾一下为什么要做VIO xff0c 以及为什么要做VIO初始化 我们知道单目相机
  • 线程互斥量死锁,与sleep没有关联

    文章目录 死锁问题死锁原因产生死锁的几个常见场景死锁产生的四个必要条件 61 61 仅供参考互斥条件占有和等待条件不可抢占条件环路等待条件 pthread mutex lock 线程互斥量死锁 与sleep没有关联 项目上 定位死锁原因 无
  • linux下,应用程序中的全局变量与so库中的全局变量名冲突,怎么办?

    文章目录 Wl Bsymbolic 动态库与应用 如果存在同名全局变量 会如何 实现了一个动态库 xff0c 封装了一些方法 然后基于这个动态库 xff0c 实现了一个应用程序 应用程序中含有全局变量A xff0c 动态库中也含有全局变量A
  • 内存管理:分页,分段,段页结合

    内存管理 xff1a 分页 xff0c 分段 xff0c 段页结合
  • STM32 SPI 收发数据 ---规则 + 问题解析

    规则 xff1a 1 xff09 高速同步串行口 3 xff5e 4线接口 xff08 CS xff0c CLK xff0c MOSI xff0c MISO xff09 xff0c 收发独立 可同步进行 2 xff09 SPI分为主从模式
  • gazebo: ROS Control的仿真教程

    gazebo 43 ROS control 1 预备知识2 数据流3 实现动态避障的环境构建 本文主要介绍如何为仿真机器人做控制器的仿真 通过仿真控制器 xff0c 控制机器人的对应关节 1 预备知识 关于gazebo中机器人的仿真 xff
  • NuttX实时操作系统

    NuttX 是一个实时操作系统 RTOS xff0c 其重点遵从特定的标准并且尽量小型化 可伸缩良好且可适应从8位到32位单片机环境 xff0c Nuttx主要遵循的标准是 Posix和ANSI标准 其他的一些来自于Unix或者其他常规的实
  • STM32 CAN 配置、收发结构定义 留存...

    分布式系统项目需要 xff0c 这次弄个CAN总线来布局 xff0c 仅见CAN的冰山一角 本次使用扩展帧模式 STM32 对CAN的定义 库 CAN结构体定义 说明 xff1a 寄存器映射 xff1a typedef span class
  • cortex-M3 的SVC、PendSV异常,与操作系统(ucos实时系统)

    文章目录 SVC和PendSVSVC xff1a PendSV xff1a 操作系统 xff0c 上下文切换 实例 xff1a ucos 关于 PendSV 异常的应用 上下文切换时机 怎样满足实时性 xff1a 中断 异常处理通用模板 x
  • STM32+IAP方案 实现网络升级应用固件

    关注了这个概念有些日子了 xff0c 这段时间总算有机会实战 61 61 网络升级应用固件 xff0c 这里记录下遇到的问题 xff0c 及解决方案 原理与网上流传的串口作为传输手段 一致 xff1b 不同之处 xff0c 无非我这里使用了

随机推荐

  • IAR版本不兼容导致无法正常打开工程文件--解决方法

    嵌入式开发 学习过程中 xff0c 难免需要借鉴别人的工程 xff0c 但是开发环境的匹配始终是个问题 61 61 版本不匹配 无法正常的打开工程文件 一般官方标配的开发环境包括 xff1a MDKIAR 这里描述IAR环境下 xff0c
  • STM32中GPIO的8种工作模式

    概念解释 xff1a 复用功能 xff1a 即片内外设 xff0c 包括UART SPI CAN I2C等等 xff0c 开启这些外设的功能 xff0c 就是使用了系统的复用功能 复用功能有两种 xff1a 没有重映像 重映像 xff08
  • 再读 ucosII源码(邵贝贝):任务之间的通讯与同步--邮箱

    邮箱简介 xff1a 邮箱是 C OS II中另一种通讯机制 xff0c 它可以使一个任务或者中断服务子程序向另一个任务发送一个指针型的变量 该指针指向一个包含了特定 消息 的数据结构 为了在 C OS II中使用邮箱 xff0c 必须将O
  • 阿里云ubuntu 16.04安装图形界面

    1 VNC的安装与配置 安装之前先输入 span class pln apt span span class pun span span class kwd span class hljs keyword get span span spa
  • cmake/makefile 获取git版本信息并传入源码输出

    CMake获取git commitId CMakeLists txt cmake minimum required VERSION 2 8 project test set SRCS main cpp 执行git命令 xff0c 并把结果重
  • 为什么使用static的类方法不需要new

    文章目录 JAVA加载过程static静态成员从static学习java编译过程JVM加载顺序摘要 xff1a 稍稍延申一下 xff1a 对于此java给出了两个解决方案 xff1a 总结static下面说说静态的特点 xff1a 实例变量
  • CMake引入三方库

    做移动端的NDK开发经常需要引入三方库 xff0c 本文以常见的JSON库为例进行说明 jsoncpp源码下载地址https github com open source parsers jsoncpp 下载1 9 5的tag 1 纯源码依
  • C++中泛型算法详解5:面向泛型算法的迭代器类别

    前言 任何算法最基本的特性是要求迭代器提供那些操作 根据算法要求的迭代器操作 xff0c 可以分为如下迭代器类别 xff1a 1 input iterator 2 output iterator 3 forward iterator 4 b
  • CMake&CMakeList.txt

    1 各种关系 在各种开源项目中 xff0c 经常会发现项目中除了代码源文件 xff0c 还包含了 CMakeList txt Makefile 文件 xff0c 在项目的编译时候需要用到的命令有 cmake make 我们本次想搞清楚他们之
  • 使用Docker制作镜像并推送到镜像仓库

    本文会告诉你如何使用docker从远端下载一个镜像 xff0c 然后对镜像做修改 xff0c 最后再把镜像推送到你自己的镜像仓库 1 安装Docker 这个没啥说的 xff0c 根据你自己的环境下载对应的安装包安装就是了 docker官网下
  • Mac上几款免费的MySql客户端

    由于开发需要在Mac上连接MySql数据库 xff0c 虽然命令行也能用 xff0c 但是我还是喜欢用带UI的客户端去连 就用过的mysql客户端来说 xff0c 最好用的是Navicate xff0c 不过后来收费了 xff0c 还收的贼
  • Mac M1芯片安装 Numpy Pandas

    本文教你如何简单的在M1芯片的MacBook上安装Numpy和Pandas 刚入手了一个Mac Pro xff0c 是M1芯片的 xff0c 结果在安装Numpy和Pandas时遇到了各种莫名奇妙的问题 第1种报错 xff0c 很长 xff
  • addr2line

    1 符号表 1 1什么是符号表 符号表是内存地址与函数名 文件名 行号的映射表 符号表元素如下所示 xff1a lt 起始地址 gt lt 结束地址 gt lt 函数 gt lt 文件名 行号 gt 1 2为什么要配置符号表 为了能快速并准
  • 一些有用的Python库

    1 制作动态排序图的库 做出来像这种效果 https mp weixin qq com s DQf35t7PUcFmi3j942Q7A 2 基于matplotlib轻松绘制漂亮的表格 比自己在ppt或者excel中搞出来的表格好看多了 像这
  • Android创建杀不死的Service

    在Android开发中我们经常会遇到一些特殊的需求需要让我们的服务常驻内存 xff0c 但是会遇到各种清理软件或者用户在设置中手动停止程序的情况而导致我们的服务被异常的终止掉 虽然没有办法保证绝对的常驻内存 xff0c 但是通过策略我们还是
  • Mac 从Bash切换到Zsh的注意事项

    1 第一步要安装Zsh xff0c 可以参考现成的文章 xff0c 推荐一篇https zhuanlan zhihu com p 19556676 2 安装完成之后退出命令行重新进入 xff0c 就可以看到Zsh的效果啦 3 及得切换默认的
  • 数组求实际长度(逻辑长度)

    有很多情况下 xff0c 比如我们定义了一个数组 xff0c byte a 61 new byte 100 但是给数组赋值的时候只赋了10个 xff0c 虽然这个数组在内存中的长度仍然是100 xff0c 但是我们想得到的确实数组的实际长度
  • java清空数组

    定义一个数字byte a 61 new byte 20 如果给数组赋值后又想让数组恢复到初始的状态 xff0c 那如何做呢 xff0c 其实很简单 xff0c 直接上方法 将byte数组置空 public static byte reset
  • 使用gazebo的官方模型库文件

    首先下载所有的gazebo模型库文件 xff0c 我已经打包上传到csdn了 xff0c 可以从如下链接中下载 xff1a 下载link 然后将下载好的文件存放在如下目录 xff1a cd gazebo models 如果没有上述目录就自行
  • 作为一个普通的程序员,到底应不应该转型AI工程师?

    动不动就是50万的毕业生年薪 xff0c 动不动就是100万起步价的海归AI高级人才 xff0c 普通员到底应不应该转型AI工程师 xff0c 普通程序员到底应该如何转型AI工程师 xff1f 下面就分享几个特别典型的普通程序员成功转型AI