ARTS 打卡第 9 天 - 二分法、Stable Diffusion Prompt 书写技巧、SeamlessM4T 以及“读论文”的习惯

A：35. 插入搜索位置

给定一个排序数组和一个目标值，在数组中找到目标值，并返回其索引。如果目标值不存在于数组中，返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O (log n) 的算法。
示例 1:
输入: nums = [1,3,5,6], target = 5
输出: 2
示例 2:
输入: nums = [1,3,5,6], target = 2
输出: 1
示例 3:
输入: nums = [1,3,5,6], target = 7
输出: 4
提示:

1 <= nums.length <= 10^4

-10^4 <= nums[i] <= 10^4

nums 为 无重复元素 的 升序 排列数组

-10^4 <= target <= 10^4

Copy
function searchInsert(nums: number[], target: number): number {
let left = 0
let right = nums.length - 1
if (target <= nums[0]) {
return left
}
if (target > nums[right]) {
return right + 1
}
let mid = Math.floor((left + right) / 2)
while (left < right - 1) {
const midValue = nums[mid]
if (midValue === target) {
return mid
}
if (midValue < target) {
left = mid
} else {
right = mid
}
mid = Math.floor((left + right) / 2)
}
return right
}

提交结果为：

65/65 cases passed (64 ms)
Your runtime beats 72.07 % of typescript submissions
Your memory usage beats 52.45 % of typescript submissions (43.7 MB)

看到题目要求使用时间复杂度为 O(logn) 的算法，基本可以判断为使用二分法，前几天刚做过一道二分法的题目，这次上手更快了。写的时候在边界条件的判断上还是花了一些时间去想的。首先是考虑 mid 始终是 left 和 right 中间的一个值，那就无法覆盖到超出这个边界的情况，因此上来先判断了下 target 是不是会超出最大边界的，是则返回边界情况。然后再是 left 和 right 会不断压缩，直到压缩到 left === right - 1 的情况，这时候区间已经无法再压缩了，因此要终止循环，最后因为一开始我们已经提前确定了值不会超出 left 和 right 的范围，因此如果中间过程中没有命中某一项，那直接范围 right 就是正确的插入位置。

R：How to Engineer the Perfect Stable Diffusion Prompt

以后的文章都会通过 QA 法来记录总结，这样会更容易掌握文章的内容，后续回顾也会更加方便。

Q：为什么高质量的 Prompt 对使用 Stable Diffusion 来说很重要？

它给模型传达指令和操作的框架，影响模型的执行，从而影响结果的质量。掌握 Prompt Engineering 的技巧可以让艺术家探索艺术路径、实验艺术风格，甚至在 AI 艺术领域定义资产的艺术身份。

Q：创建有效的 Stable Diffusion Prompt 的步骤是什么？

定义图片类型
照片 (photograph)、素描 (sketch)、3D 渲染 (3D render) 还是绘画 (painting)，定义好类型可以作为很好的基础

定义主体
清晰定义主体和它的属性。主体可以是物体、人、风景或其它图像中的核心元素

定义场景
定义主体所在的环境，可以是背景细节、天气条件、一天的时间等。描述得越清晰效果越好

定义风格
比如现实 (realism)、超现实 (surrealism)、印象派 (impressionism)。或者是某位艺术家的风格

说明光照细节
使用特定词语说明光照条件，比如背光 (backlight)、烛光 (candlelight) 或自然光 (natural lighting)；说明细致程度，比如高度细致 (highly detailed)、颗粒感 (grainy) 或光滑 (smooth)

声明构图
定义图中元素的布局。比如鸟瞰图 (aerail view)、特写 (close-up)、广角 (wide-angle) 或其它构图方式。

定义色彩风格
如果有色彩偏好也需要定义，比如三色配合 (triadic color scheme) 或者水洗配色 (washed color)

避免过度复杂
过度复杂或矛盾的指令可能会让模型无法输出质量好的结果

T：SeamlessM4T - 多合一的多语言、多模态模型

Meta AI 最新开源了一个叫做 SeamlessM4T 的多语言多模态模型，可以进行 100 多种语音到文本、语音到语音、文本到文本的翻译和语音识别任务。

S：《李笑来：我的读书经验》摘录

之前摘录过一段李笑来老师这篇文章里的一句话了，感觉李笑来老师这篇文章写得真的不错，今天就又想起来当时看到颇有感触的一句话：

批量阅读学术文献，就好像是从父母的庇护下离开而后独立生存一样，刚开始的时候甚至有一点害怕，但是，没有过多久，就开始可怜起过去的自己。过去怎么那么傻，竟然总是要衣来伸手，饭来张口，不来什么，就都没有。
本科教育结束之后，理论上来讲，就应该把大部分时间用来读学术文献，很可惜，貌似在我们国家，根本就没有这个概念。学术研究被翻译成通俗读物，这个时间滞后实在是太严重了。

最近也读了一点关于大语言模型的论文，一方面感受到了李笑来老师说的 “刚开始有点害怕，没过多久就觉得早该如此” 的感觉，论文确实是一个能了解关心的领域的前沿的快速有效的路径，阅读论文是一个值得养成的习惯。

Reference:

ARTS 打卡活动