21年5月26日好未来机器学习算法工程师暑期实习面试题2道

这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战

今天扒了2道好未来的面试题,还算比较常见且经典的题。

1.讲讲dropout原理

Dropout目标:缓解过拟合、减少收敛时间

Dropout原理可以总结位:网络前向传播的时,某个神经元的激活值以一定的概率值p停止工作,这样可以使网络不太依赖某些局部特征,可以使模型泛化性更强;

P:表示丢弃概率,即使神经元失活的概率;为了保证训练和测试时神经元数量分布一致,有两种模式:upscale_in_train'和'downscale_in_infer'

upscale_in_train: 在训练时增大输出结果。
train: out = input * mask / ( 1.0 - p )
inference: out = input
downscale_in_infer:在预测时减小输出结果
train: out = input * mask
inference: out = input * (1.0 - p)
复制代码

举例说明:比如网络共有10个可训练参数,训练时,丢弃概率设置为0.2,那么有8个参数训练。但是测试时不使用Dropout就会有10个参数,为保证两者相等,可以训练时保留的8个神经元权重乘以1/(1-0.2)=8或者测试时所有神经元权重参数乘0.8(10*0.8=8).

2.算法题:判断是否是平衡二叉树

平衡二叉树定义:二叉树每个节点的左右子树高度差不超过1;

思路:平衡二叉树满足根节点及其子节点都是平衡二叉树,所以需要递归计算每个节点左右子树的高度,然后判断高度差是否不超过1;参考代码如下:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def isBalanced(self, root: TreeNode) -> bool:
        if not root : return True
        result = abs(self.getHeight(root.right) - self.getHeight(root.left)) <= 1 and self.isBalanced(root.left) and self.isBalanced(root.right)
        return result
    def getHeight(self, root: TreeNode):
        if not root: return 0
        return max(self.getHeight(root.left), self.getHeight(root.right)) + 1
复制代码

猜你喜欢

转载自juejin.im/post/7030753405819699208