BPR
BPR 算法
显式反馈:用户对物品的评分,如电影评分;隐式反馈:用户对物品的交互行为,如浏览,购买等,现实中绝大部分数据属于隐式反馈,可以从日志中获取。BPR是基于用户的隐式反馈,为用户提供物品的推荐,并且是直接对排序进行优化。贝叶斯个性化排序(Bayesian personalized ranking,BPR)是一种 Pairwise 方法,并且借鉴了矩阵分解的思路。在开始深入讲解原理之前我们先了解整个 BPR 的基础假设以及基本设定。
因为是基于贝叶斯的 Pairwise 方法,BPR 有两个基本假设:
每个用户之间的偏好行为相互独立,即用户 u 在商品 i 和 j 之间的偏好和其他用户无关。
同一用户对不同物品的偏序相互独立,也就是用户 u 在商品 i 和 j 之间的偏好和其他的商品无关。
这里补充一下Pairwise。配对法(Pairwise)的基本思路是对样本进行两两比较,构建偏序文档对,从比较中学习排序,因为对于一个查询关键字来说,最重要的其实不是针对某一个文档的相关性是否估计得准确,而是要能够正确估计一组文档之间的 “相对关系”。
因此,Pairwise 的训练集样本 ...
NeuralCF
本文主要参考了NeuralCf的论文,及王喆的《深度学习与推荐系统》一书,文中的图片也都来自于此。
NeuralCF论文中文翻译
在前边我们学习了矩阵分解,我们从深度学习视角看待矩阵分解,其中矩阵分解中的用户隐向量和物品隐向量完全可以看作是一种Embedding方法,最终的输出就是用户隐向量和物品隐向量进行内积操作得到最终的评分预测。如果我们用神经网络来描述这个过程的话就是如下图所示:
是不是觉得模型的结构过于简单了呢,两个隐向量之间仅仅通过一个内积就输出了,所以也就会导致矩阵分解模型常常处于欠拟合的状态,无法对优化目标进行有效的拟合。
在NeuralCF的论文中作者也举了一个例子来说明通过内积来预测评分的不可靠性。
上图说明了内积如何限制了MF的表达能力。
为了更好的解释实例,我们明确两种设置:
MF将用户和物品映射到相同的潜在空间中,因此可以用内积衡量两个用户之间的相似性,也可以等效为他们潜在向量之间的夹角的余弦。
使用Jaccard系数作为相似性系数
首先,我们关注图(a)的前三行用户,很容易得到s23(0.66)>s12(0.5)>s13(0.4)s_{2 ...
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
Quick Start
Create a new post
1$ hexo new "My New Post"
More info: Writing
Run server
1$ hexo server
More info: Server
Generate static files
1$ hexo generate
More info: Generating
Deploy to remote sites
1$ hexo deploy
More info: Deployment
生成模型
生成模型:给定训练集,产生与训练集同分布的新样本。即如下图所示希望学到一个模型pmodel(x)p_{model}(x)pmodel(x),其训练样本的分布pdata(x)p_{data}(x)pdata(x)相近。假设我们给定了一万张二次元头像的图片,通过对这一万张图片学习之后得到的模型知道如何这些图片是如何产生的,并且可以生成出与新的二次元图片,并与原来的图片是同一类的(即同分布)。但我们的原来的图片的特征空间的分布我们是不知道的,我们的目标就是寻找一个与其同概率密度函数的模型,从该模型从去采样得到的样本就是我们想要生成的图片。
所以这里就是无监督学习里面的问题:密度估计问题。其主要学习思路主要有两类:
一类是显示的密度估计:显示的定义并求解分布pmodel(x)p_{model}(x)pmodel(x),主要有PixelRNN/PixelCNN和VAE。
另一类是隐式的密度估计:学习一个模型Pmodel(x)P_{model}(x)Pmodel(x),而无需定义它。主要有GAN,GSN。
PixelRNN与PixelCNN
PixelRNN
这是一个显示的密度模型。 ...
宝塔面板降级去除强制登录
宝塔面板对于Linux小白来说是非常友好的,不需要知道很多命令就可以完成建站等多种操作。但是安装宝塔面板后会强制登陆,这是非常恶心人的,从7.8版本之后,之前的去除强制登录的办法都失效了,想要去除强制登陆就只能降级为7.7版本。
1.安装宝塔面板
123456789#Centos安装脚本yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh#Ubuntu/Deepin安装脚本wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh#Debian安装脚本wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && bash install.sh#Fedora安装 ...
centos8迁移rocky linux
centos8已经在2021年12月31号提前停止维护了。而Rocky Linux 是红帽宣布放弃 CentOS Linux 后,由 CentOS 联合创始人 Gregory Kurtzer 创建的 Linux 发行版,旨在继承 CentOS 的社区属性。
由于阿里云在重装系统时暂时为提供Rocky Linux的镜像,但是由于centos与Rocky Linux的二进制文件是一样的,所以可以通过Rocky Linux给的脚本一键转换为Rocky Linux。
注:在迁移完成后,在Rocky Linux迁移脚本的GitHub下看的的修复yum源的镜像链接,本人未经过验证,可以先用如下命令修改yum源,在用dnf update 更新系统后在运行迁移脚本。
1234sed -i -r \ -e 's!^mirrorlist=!#mirrorlist=!' \ -e 's!^#?baseurl=http://(mirror|vault).centos.org/\$contentdir/\$releasever/!baseurl=https://dl ...
循环神经网络
传统神经网络弊端
如上图所示,如果我们的输入是这样一句话,希望输出是其中的人名,如果我们使用标准的神经网络建模,就会出现如下问题:
①输入和输出数据在不同的例子中可能有不同长度。(每句话的长度都肯是不同的)
②一个像这样的神经网络结构,它并不共享从文本的不同位置上学的的特征。以前的特征输入是稳定的,即所有的特征表达的内容是同一性质的,比如人名是一个特征域类别,其他的是其他类别,一旦他们交换位置,是需要重新取学习的(即人名在一句话中出现的位置是不固定的),如果神经网络已经学习到了在位置1出现的Harry是人名,那么如果Harry出现在其他位置,可能就识别不出来了。
③参数量巨大。输入网络的特征往往是one hot或embedding向量,维度较大,并且输入网络的特征是一段序列,当这段序列很长的时候,输入量是巨大的。
④没有办法体现时序上的前因后果(比如翻译)。
RNN循环神经网络
网络结构
一个典型的循环神经网络结构如上图所示.我们可以发现RNN的隐藏层与传统神经网络之间有所不同。我们将其隐藏层展开,RNN将每个时间状态关联了起来,当前状态不仅受当前输入的影响,也受上一时刻的状态的影 ...
卷积神经网络
卷积
对于连续型函数f,g,f函数和g函数的卷积公式为:
f∗g(n)=∫−∞+∞f(x)g(n−x)dxf*g(n)=\int_{-\infty}^{+\infty}f(x)g(n-x)dx
f∗g(n)=∫−∞+∞f(x)g(n−x)dx
f和g函数做卷积的实质是先对g函数取反然后在平移一个n在于f函数相乘在相加。
对于离散函数,f函数和g函数的卷积公式为:
f∗g(n)=∑mf(m)g(n−m)f*g(n)=\sum_{m}f(m)g(n-m)
f∗g(n)=m∑f(m)g(n−m)
(n相当于步长)
我们从图中可以看出,无论是连续型或者是离散型函数,做完卷积以后,得到的新的函数仍然保留了原来的函数的特征(比如对于连续型函数其卷积以后的图像趋势与原来的函数趋势仍非常相似),所以卷积可以认为是一个滤波器,g函数对f函数做卷积,可以把f函数的重要特征抓取,非重要特征舍弃。
图像的编码与卷积
对于一个图采用像素编码。以32像素的灰度图为例,将一个图片的横向和纵向分别用32个像素进行编码,每个像素取值是0到255。像素越少处理的速度越快,当然特征损失的也会更多。
那么该如何获得 ...
Linux开启swap
最近发现服务器内存占用率好高,经过排查修改了php-fpm的pm.max_children的值也没有多大改善,期间发现swap分区为0.就开始添加swap分区。
1.创建一个swap文件
12cd /usrmkdir swap
2.创建swap分区文件
123dd if=/dev/zero of=swapfile bs=1024 count=2000000#bs代表每个块大小,#count代表的是大小, 这里大约是2G
3.挂载swap文件
123swapon /usr/swap/swapfile#卸载swapswap /usr/swap/swapfile
4.设置开机自动挂载
123vim /etc/fastab#在文件最后增加/usr/swap/swapfile swap swap default 0 0
再来说下内存释放,最后重启内存占用正常了。😅😅😂😂果然重启解决90%问题。😊😊😊
WordPress使用LateX
由于WordPress不支持Latex公式,对要写一大堆公式的我很是难受,无奈投靠了Hexo,今天重要找到了办法。转载自:想在WordPress使用Latex?两行代码解决! - 宅到没朋友 (weekreport.cn)
很多人用WordPress建站作为自己的个人博客,平时写一些技术博客,有时必然会用到数学公式,Latex是编辑数学公式的利器,WordPress也有很多插件用来支持Latex,但如果你不想使用插件,或者担心插件拖慢你站点的速度该怎么办呢?
其实只需要两行代码就可以解决问题!
找到主题文件夹的header.php文件,在文件的与<\head>插入以下脚本::
1234<!--MathJax show start--><script>MathJax = {tex: {inlineMath: [['$', '$'], ['\\(', '\\)']]}, svg: {fontCache: 'global ...

