跟题主分享几个超级高频的机器学习面试题,希望能祝你一臂之力!Q1:如何对贝叶斯网络进行采样 (8.6)对一个没有观测变量的贝叶斯网络进行采样,最简单的方法是祖先采样(Ancestral Sampling),它的核心思想是根据有向图的顺序,先对祖先节点进行采样,只有当某个节点的所有父节点都已完成采样,才对该节点进行采样。

以场景描述中的图8.9 为例,先对Cloudy 变量进行采样,然后再对Sprinkler 和Rain 变量进行采样,最后对WetGrass 变量采样,如图8.10 所示(图中绿色表示变量取值为True,红色表示取值为False)。根据贝叶斯网络的全概率公式可以看出祖先采样得到的样本服从贝叶斯网络的联合概率分布。

如果只需要对贝叶斯网络中一部分随机变量的边缘分布进行采样, 可以用祖先采样先对全部随机变量进行采样,然后直接忽视那些不需要的变量的采样值即可。由图可见,如果需要对边缘分布p(Rain) 进行采样,先用祖先采样得到全部变量的一个样本,如(Cloudy=T, Sprinkler=F,Rain=T,WetGrass=T),然后忽略掉无关变量,直接把这个样本看成是Cloudy=T 即可。

接下来考虑含有观测变量的贝叶斯网络的采样,如图8.11 所示。网络中有观测变量(Sprikler=T,WetGrass=T)(观测变量用斜线阴影表示),又该如何采样呢?最直接的方法是逻辑采样,还是利用祖先采样得到所有变量的取值。如果这个样本在观测变量上的采样值与实际观测值相同,则接受,否则拒绝,重新采样。

这种方法的缺点是采样效率可能会非常低,随着观测变量个数的增加、每个变量状态数目的上升,逻辑采样法的采样效率急剧下降,实际中基本不可用。因此,在实际应用中,可以参考重要性采样的思想,不再对观测变量进行采样,只对非观测变量采样,但是最终得到的样本需要赋一个重要性权值:其中E 是观测变量集合。这种采样方法称作似然加权采样(Likelihood Weighted Sampling),产生的样本权值可以用于后续的积分操作。

计算机行业的实际工作中,涉及数据结构和算法相关的多吗?光是编程语言厉害不行吗?

说实话,在程序员日常编码的过程中,涉及到数据结构和算法的地方不是太多。因为数据结构和算法其实在底层的编程语言的相关类已经帮你封装好了,很多时候你只需要调用编程语言的方法就好。但是对于真正有技术的程序员来说,拥有好的数据结构和算法能力是非常重要的。有的时候,你需要用到算法以及数据结构的能力,去优化你的代码和以及性能。

健壮且高效的代码是公司所需要的,所以光是编程语言厉害是不行的。打个比方,你现在如果出去找工作的话,你会看到很多公司的招聘不只是只强调你的编程语言能力,同时在其他方面的能力,也有一定的要求。比如对于 Java 框架的了解,对于大数据技术、或者 MySQL 数据库技术的了解等等,公司招聘的同学,是希望能够拥有综合技术实力的同学。

在数据结构和算法能力方面,工程类开发的同学可以不用那么注重,但是最基础的算法和数据结构你肯定是要懂的,比如集合类、数据、HashMap、链表、树等数据结构的理解。这些基础的数据结构你平时编码肯定也会使用到。同时,像排序算法、二叉树的遍历、图的遍历等等基础算法,你虽然不能一下写出来,但是你的脑海中应该对它们有一定的认识,最起码能够理解这些算法的含义,否则你以后再优化某个东西的时候,根本都不知道能用哪些算法来进行优化。

好的程序员,不仅仅能够对于编程语言熟练掌握和应用,同时能够对于计算机专业方面的基础知识掌握的非常好。其实我之前工作的时候,我的前老板就给我推荐了一个算法相关的书籍,这本书叫做《算法》,记得是用Java语言写的,他当时给我话就是,要想往上爬的高,就要基础扎实,让我好好学学数据结构和算法。我现在有事没事就翻翻这本书。

其实程序员还是要全面发展吧,编程语言是一方面,但是编程语言大家都能够掌握,差异就在基础知识上面。你的基础比别人更加的牢固,那么你未来向上发展的加速度就会比别人快,同时定位问题时和开发代码时,你想的就会别人更加的全面,那么老板和公司也会更加的欣赏你,这样你才能更好的发展。我是Lake,专注大数据技术原理、人工智能、数据库技术、程序员经验分享,如果我的问答对你有帮助的话,希望你能点赞关注我,感谢。

TensorFlow掌握到什么程度,可以在简历上面写熟悉TensorFlow?

嗯。。。这种问题,如果有应用过TensorFlow做大规模分布式机器学习系统的话,那么已经可以算作熟悉TensorFlow了。当然如果要检验是否熟悉Tensorflow,那么可以用下面这些标准大概确认下自己的熟悉程度,当然同时也可以用来查缺补漏。Tensorflow基础知识点计算图在Tensorflow中,经常提及到计算图的概念,那什么是计算图呢?它实质上是一个全局数据结构:计算图是一个有向图,捕获有关计算方法的指令。

我们来看看简单的计算图形成,通过以下代码,我们可以生成2 3的步骤,但是只包含计算步骤,不包含结果,至少目前还没实现。会话会话的概念就是将计算图生成的步骤逐一执行,处理内存分配和优化,使我们能够实际执行由图形指定的计算。例如以下代码:占位符和 feed_dict占位符是一种用于接受外部输入的节点,而feed_dict 属性是为了给占位符提供实质的数值。

变量共享你可能会碰到带有变量共享的 Tensorflow 代码,代码有它们的作用域,并设置“reuse=True”。我强烈建议你不要在代码中使用变量共享。如果你想在多个地方使用单个变量,只需要使用指向该变量节点的指针,并在需要时使用它。换句话说,对于打算保存在内存中的每个参数,应该只调用一次 tf.get_variable()。

优化器在深度学习中,典型的“内循环”训练如下:获取输入和 true_output;根据输入和参数计算出一个“猜测”;根据猜测和 true_output 之间的差异计算出一个“损失”;根据损失的梯度更新参数。优化器的作用在于对于找到的每个变量节点,它计算与损失相关的变量梯度。然后,它为该变量计算新值:当前值减去梯度乘以学习率。

最后,它执行一个赋值操作来更新变量的值。用 tf.Print 进行调试一般来说,检查计算图中发生了什么是很困难的。你不能使用常规的 Python 打印语句,因为你永远无法访问到要打印的值,这时候就需要用tf.Print。常用模型的Tensorflow实现对于这一块内容,最好自己用编程语言实现过一遍,考验深度学习基础功底。

卷积网络(Convolutional Network)循环神经网络(LSTM)(Recurrent Neural Network (LSTM))受限玻尔兹曼机(Restricted Boltzmann Machine)深度信念网络(Deep Belief Network)作为RBM堆叠的深度自编码器(Deep Autoencoder as stack of RBMs)去噪自编码器(Denoising Autoencoder)堆叠的去噪自编码器(Stacked Denoising Autoencoder)作为去噪自编码器堆叠的深度自编码器(Deep Autoencoder as stack of Denoising Autoencoders)多层感知器(MultiLayer Perceptron)Logistic 回归TensorFlow的交叉熵函数交叉熵(Cross Entropy)是Loss函数的一种(也称为损失函数或代价函数),用于描述模型预测值与真实值的差距大小,常见的Loss函数就是均方平方差(Mean Squared Error)。

交叉熵的具体定义如下:TensorFlow针对分类问题实现了四个交叉熵函数,它们是TF . nn . sigmoid _ cross _ entropy _ with _ logit STF . nn . soft max _ cross _ entropy _ with _ logit STF . nn . spare _ soft max _ cross _ entropy _ with _ logit STF . nn . weighted _ cross _ en。Tropy_with_logits我会在这里发布所有与科技相关的有趣文章。欢迎订阅我的头条号。

 2/2   首页 上一页 1 2 下一页

文章TAG:agents  tensorflow  算法  环境  
下一篇