【学习笔记】机器学习竞赛常见思路总结
一、背景算法领域的实践项目都有着类似的处理流程,一通百通。通过分析过去竞赛的高分解法,了解并总结竞赛的常用思路,最后复用经验到其他同类型竞赛当中。
Step 1 - 查看该类型问题的任务要求,思考问题解决方法Step 2 - 观察数据集格式和内容,思考数据处理方法Step 3 - 阅读以往同类型项目BaselineStep 4 - 复现提供的任意一个Baseline,尝试修改达到不同效果Step 5 - 总结自己的问题处理流程,沉淀方法【需提交自己的笔记】-【5月28日23:59截止】Step 6 - 直接上手全新的同类型赛事,检验自己的方法【需提交自己的成绩】-【5月31日23:59截止】
2024-05-28
notes
Machine Learning
【学习笔记】开始认识LLM和一些概念
一、背景和大纲做大模型相关应用有一阵子了,但一直没沉下心来总结常见的概念和技术,对于很多名词也仅仅是浅尝辄止。每天早上公司的聊天软件都会推送周围同事的热门技术文章或设计文档,顿时产生了技术焦虑。什么是 agent?什么是 langchain ?收藏夹里积灰的链接越来越多,但始终腾不出时间来消灭它们。终于在某天晚上我想通了,不给自己规定个Deadline,人是始终不会主动行动的。刚刚好 Datawhale 在集合一批小伙伴进行组队学习,我也年轻一把,和小朋友们一起体验组队打卡的乐趣。
我打算用两周时间,整理下大模型相关的技术名词和技术背景,辅以几个demo实践。不求深入,但求理解,这样一是提升沟
【学习笔记】通过文字检索视频片段:VCED之拓展优化
本篇文章是跨模态检索工具 VCED 介绍的第六篇。介绍完 VCED 的核心机制与前后端,本次记录下可以优化的点。
1. 目前向量检索使用的是最简单的暴力搜索,所以向量检索花费的时间很慢,这里可以优化成以 Faiss 实现的高性能检索库;Faiss是Facebook AI团队开源的针对聚类和相似性搜索库,为稠密向量提供高效相似度搜索和聚类,支持十亿级别向量的搜索。Faiss用C++编写,并提供 Numpy 风格的 Python 接口。
为了实现 Faiss 的高效检索功能,我们需要改写 SimpleIndexer 类:
索引初始化时,默认是从本地 sqlite 中进行读取,可以更改为以下读取方
【学习笔记】机器学习之XGBoost、LightGBM、CatBoost
本文会记录 XGBoost、LightGBM、CatBoost 的原理、区别和使用方法。
XGBoostXGBoost 是 GBDT 算法的一种高效实现方式。
XGBoost 的原理原始的 GBDT 算法基于经验损失函数的负梯度来构造新的决策树,构造完成后再进行后剪枝。XGBoost 添加了预剪枝操作,它在目标函数中添加了正则项。
L_t=\sum_i L(y_i, F_{t-1}(x_i)+f_t(x_i)) + \Omega(f_t)其中:
\Omega(f_t)=\gamma T+\frac{1}{2}\lambda \sum_{j=1}^{T}w_{j}^2其中 T 为这棵树的叶
【学习笔记】通过文字检索视频片段:VCED之后端逻辑
本篇文章是跨模态检索工具 VCED 介绍的第五篇,前面介绍了前端部分,本篇来研究后端部分。
一、概览项目后端共由四个文件组成,其中 VideoLoader 负责对上传的视频进行关键帧提取,CustomClipText 负责将上传的图片转换为向量数据,CustomClipImage 负责将提取的关键帧转换为向量数据,SimpleIndexer 负责向量数据的检索。
VideoLoader
CustomClipText
CustomClipImage
SimpleIndexer
二、VideoLoaderVideoLoader 继承自 Executor,在整个后端中执行抽帧操作。
这里简单介
【学习笔记】通过文字检索视频片段:VCED——Streamlit前端简介
本篇文章是跨模态检索工具 VCED 介绍的第四篇,即将揭晓第一篇中 demo 的前端部分是如何实现的,以及如何利用 python + Streamlit 工具快速开发一个前端界面。
Streamlit 是一个基于 Python 的 Web 应用程序框架。Streamlit 基于 Python,开发者无需学习其他就可以搭建一个较为完整的系统。因此此次教程,VCED项目就通过 Streamlit + Jina 构建了一套系统。
1. 安装pip install streamlit
2. 使用 Streamlit 构建 Web appimport pandas as pd
import numpy
【竞赛打卡】百度搜索竞赛——问答抽取赛道
先占坑,等比赛结束记录模型的思想
11 月至 12 月 15 作品提交
给看课程的同学算力,100 小时;fork 项目、创建项目,提升用户等级,从而获取免费时长;相当多实际项目;其他比赛;其他项目的 baseline paddleNLP 在 github
baseline:赛道 1 的 baseline 5043272 4960090赛道 2 的 baseline TensorRT 5007642
序列标注任务的思路、QA 的思路
思路 1:使用抽取式问答思路baseline1: 水哥https://aistudio.baidu.com/aistudio/projectdetail/502
【学习笔记】李宏毅ML-HW7-使用BERT解决答案提取问题
李宏毅老师主讲的机器学习MOOC课程的笔记,本篇会试着完成作业 7,以及分析问答模型的建模方法和优化方法。
本篇博客记录课程作业 7 的做法。
一、任务目标抽取式问答(Extractive Question Answering)任务是指:从一段文本中提取对应问题的答案。
一般而言,模型的输入为文本(Document)和问题(Question),输出答案在文本中的位置。如果模型认为文本中没有答案,则输出一个特定的占位符,比如“无答案(NoAnswer)”。
本次作业的 baseline 使用了 BERT 作为预训练模型。具体地,使用 [SEP] 的这个特殊单词,将 Query 和 Docum
【学习笔记】通过文字检索视频片段:VCED——跨模态模型介绍
本篇是 VCED 跨模态检索工具介绍的第三篇,介绍 VCED 实现跨模态检索的核心模型和算法。本篇文章只能说浅尝辄止,更深入的思考还需后续补充。
一、CLIP 模型CLIP模型将原有的图像标签替换为图像的文本描述信息,来监督视觉任务的训练,在下游任务中得到了较好的zero-shot的结果。
该模型将图像分类问题转换为图文匹配问题,在下游任务(以图像分类为例)的实现中,我们需要先基于图像标签集合,构造 text prompt 并将其通过 clip 的 text encoder 获得文本编码向量,之后,将图片通过 image encoder 获得图像编码向量。
对于每张图片,我们需要计算它与所有
【学习笔记】李宏毅ML-Note8-自监督学习、BERT
李宏毅老师主讲的机器学习MOOC课程的笔记,本篇记录的知识点有:自监督学习、BERT、GPT。
二、自监督学习自监督学习由 Yann LeCun 在 2019 年首次提出,模型会从无标签的数据中采取某些方法构建标签,然后进行学习。由于自监督学习不需要人为对数据进行标签,因此自监督学习可以看做无监督学习的一种。
自监督学习常用于训练大规模的语言模型,比如 BERT、GPT 等。由于这些模型的参数量非常大,因此训练模型所需的数据量也非常大,甚至大到人工标注无法完成的程度。
BERT 的训练数据包含整个维基百科的无标签号文本的大语料库中(足足有25亿字!) 和图书语料库(有8亿字);使用自监督学习
【学习笔记】通过文字检索视频片段:VCED之Jina
这是 VCED 跨模态检索介绍的第二篇,本篇将介绍 VCED 工具背后的关键框架:Jina。
Jina 是一个能够将非结构化数据例如图像,文档视频等,转换为向量数据的工具。利用该工具,可以快速实现多模态的检索任务。另外,Jina 也是一家新的公司,目前正在优化中。他们的 GitHub Repo。
其实 Jina 公司提供了包括向量化、服务化到实际部署的全部工具,可以支持包括 PDF 检索、视频检索在内的很多检索操作。
1. Jina 安装在 windows 系统上的安装教程:
https://blog.csdn.net/Jina_AI/article/details/122820646
【学习笔记】通过文字检索视频片段:VCED
本篇博客记录了笔者在本机(MacOS)部署 VCED 多模态数据检索工具的前端和后端的过程,并尝试使用该工具检索了一个动画短片,取得了令我惊奇的效果。
VCED: Video Clip Extraction by description, 可以通过你的文字描述来自动识别视频中相符合的片段进行视频剪辑。基于跨模态搜索与向量检索技术搭建。
本项目参考自 Datawhale 的 VCED 学习教程。
环境为 Mac Monterey, Apple M1 Pro 芯片,内存 16GB。
直接安装 docker 镜像首先需要安装 docker,在 mac 上安装 docker 只需去官网下载客户端:
【学习笔记】李宏毅ML-Note7-Transformer
李宏毅老师主讲的机器学习MOOC课程的笔记,本篇记录的知识点有:Transformer。
一、Seq2SeqTransformer是一类Seq2seq结构的模型,输入长度为N的序列,输出长度为M的序列。其中M的长度是由模型决定的。诸如文本生成、语音合成、机器翻译等任务都需要应用seq2seq模型。
很多任务可以被转化为seq2seq任务,但不一定是最优解。
seq2seq模型由一个编码器(Encodeer)和一个解码器(Decoder)组成,基础架构如下:
seq2seq模型是一种架构,只规定了输入输出,并没有规定必须使用哪种具体的模型。
二、Encoder如图所示是Transformer的
【学习笔记】李宏毅ML-Note6-注意力机制
李宏毅老师主讲的机器学习MOOC课程的笔记,本篇记录的知识点有:自注意力机制。
一、输入从图像到序列图像分类任务的输入是固定的,比如都是28*28像素的黑白图片等等。但是一些输入和输出不是定长序列的任务,比如机器翻译、语音转文字等任务,传统模型在这些任务上的表现不好。
比如词性标注任务,模型的输入是N个向量,输出是N个分类标签;比如文本分类任务,模型的输入是N个向量,输出只是一个分类标签;比如文本翻译任务,模型的输入是N个向量,输出可能是N’个向量,此时N’是未知的,需要机器自己进行判断和学习;这种任务叫做 sequences to sequences (seq2seq) 。
这些任务的输入
【学习笔记】李宏毅2019ML-Note5-卷积神经网络
李宏毅老师主讲的机器学习MOOC课程的笔记,本篇记录的知识点有:卷积神经网络。
为什么我们要用CNN?要回答这个问题,首先要说明为什么全连接网络不适合做图像识别任务。
以图像为输入,会导致输入序列特别长。假设输入是一张100*100像素的图片,每个像素有R/G/B三个分量,要想将它整理为输入序列,每张图片的维度为100*100*3=30000。
输入层的参数过多,会导致中间层的参数过多,网络不仅训练代价提升,还有过拟合的风险。实际上图像分类任务用不着那么多参数,原因有三:
每种特征所需的仅仅是图片的一小部分
从神经网络的可解释性上来说,网络的第一层学习到的是最简单的特征分类,比如一张输入
【学习笔记】李宏毅ML-Note4-深度学习优化
李宏毅老师主讲的机器学习MOOC课程的笔记,本篇记录的知识点有:深度学习算法的优化。
神经网络训练不好怎么办?为什么loss不下降?这里讨论的训练不好,是指在训练过程中的loss始终降不下来。从数学优化的角度,此时可能陷入了局部最小值或者鞍点等微分为零的点。
1. 优化陷入鞍点 (Saddle Point) 或局部极小值 (Local Minima)
鞍点是指在一个方向上的gradient=0,但是在其他方向的gradient不为零,说明loss仍有继续优化的空间。
局部最小点则是所有方向的gradient均为零,此时无论往哪个方向走都无法令loss继续变小。这种情况比较棘手。
如何确认到底是
【学习笔记】李宏毅2019ML-Note3-深度学习介绍和反向传播
李宏毅老师主讲的机器学习MOOC课程的笔记,本篇记录的知识点有:深度学习算法介绍、反向传播机制。
深度学习深度学习大家已经很熟悉了。深度学习技术属于一类机器学习技术。使用深度学习解决问题的过程同样需要三步骤:
Step1:选择深度学习模型:神经网络(Neural network),神经网络有各种不同类型,比如前馈神经网络、卷积神经网络等;Step2:模型评估(Goodness of function);Step3:选择最优函数(Pick best function),不同的网络结构需要定义不同的参数学习方法,比如反向传播算法;
接下来逐一介绍三个步骤的具体内容。
第一步:选择神经网络:从前馈网
【学习笔记】李宏毅2019ML课程-Note2
李宏毅老师主讲的机器学习MOOC课程的笔记,本篇记录的知识点有:偏差和方差、模型选择、梯度下降算法。
一、误差的来源:偏差与方差对学习算法除了通过实验估计其泛化性能,人们往往还希望能了解为什么具有这样的性能。误差来源于偏差 (bias) 和方差 (Variance)以及不可避免的噪声。
1. 偏差和方差的概念和来源偏差度量了预测值与真实值的偏离程度,对应的是学习算法本身的拟合能力;方差度量了数据扰动对模型的影响,对应的是模型的稳定性;噪声则是对应问题对应的难度。
上面的结论说明,模型的性能是由模型能力、数据的充分性以及问题本身的难度决定的。由于噪音是问题本身的特性,不好解决,因此要想提升模型的