mirror of
https://github.com/langchain-ai/how_to_fix_your_context.git
synced 2026-07-01 04:23:18 -04:00
3086 lines
863 KiB
Plaintext
3086 lines
863 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"attachments": {
|
||
"928a55e1-a9e2-48e0-a15c-b0badb9452dd.png": {
|
||
"image/png": "iVBORw0KGgoAAAANSUhEUgAABioAAAPSCAYAAADlX4LxAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAUGVYSWZNTQAqAAAACAACARIAAwAAAAEAAQAAh2kABAAAAAEAAAAmAAAAAAADoAEAAwAAAAEAAQAAoAIABAAAAAEAAAYqoAMABAAAAAEAAAPSAAAAADZrXqIAAAIzaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA2LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj45Nzg8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MTU3ODwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U+MTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4K7p3vTAAAQABJREFUeAHs3Qe8HFXZx/ET0nsjjfSeQCCQACEEkCoovStFiihFESuvIkVUOiLSu1JUEBGkCwjSawIJJSQhvffe23v+C5Pszj1ndmbv3m33dz7JZ+/OTv3u7uzMec55Tp3NthgKAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIFAEgW2KsE02iQACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgikBAhU8EFAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBogkQqCgaPRtGAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABAhV8BhBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQKBoAgQqikbPhhFAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQIBABZ8BBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQKJoAgYqi0bNhBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQIFDBZwABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQSKJkCgomj0bBgBBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQIVPAZQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgaIJEKgoGj0bRgABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQIVfAYQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEECgaAIEKopGz4YRQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEECAQAWfAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEECiaAIGKotGzYQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEECBQwWcAAQQQQAABBBBAAAEEEgts2LTZ2H8UBBBAAAEEEEAAAQQQQKDaAvWqvQZWgAACCCCAAAIIIIAAAlkFJs5bbUZOXWbqbVPH7NG7pdmuVcOsy5TiDDqOXz32hXljwpLU7g3s1NRcfVwfs1vPFgXd3QUr1ptH359rPpm50nw2a4XRfql0aNnAdGvTyAzu2tx8c6e2Zkj3FsaSUxBAAAEEEEAAAQQQQKCEBepstqWE949dQwABBBBAAAEEEECg7AWufW6qufHFaRnH0aFFA9O8UT3T0Vas9+3QxPRu19j0/Op/d1vRXqcEK9fnLV9n9rlqpFm2ZkPGsTSst40Zf9Wepn7dmt/pmYvXmj+8MNU8/O7cjH3wPdG+HTO0vTn/wK6mR9tGvtmYjgACCCCAAAIIIIAAAkUUIFBRRHw2jQACCCCAAAIIIFD5Ap/MXGG+/ocPEx2oKtdH9G1pDhjYxuxn/5dCBbvSPO17zUjzxbxVzmN55Jwdzd79Wjlfy8fE9Rs3m4v/NdE8+PbsnFf3tf6tzbXH9zFdbSCIggACCCCAAAIIIIAAAqUjQOqn0nkv2BMEEEAAAQQQQACBChT4cNryxEe1dsMm8/LYxan/xkw0PbZtbM7br4s51vYMaNygOMPM3fbydG+QQgf40fTlNRaomLN0nTnh9o8jtx8H+dVxi82IKz8wr/1yaMo0zjLMgwACCCCAAAIIIIAAAjUvUJy7nJo/LraAAAIIIIAAAggggEBJCKzfUP1Mq1MWrDYXPjrB9L/oLfN/j35hVHFfyKLtKX1VVBkzfUXUyzm/9uYXS8zwK96vdpAi2AENAn71s9HHEszLIwIIIIAAAggggAACCBRGgEBFYZzZCgIIIIAAAggggEAtFchnDwhVsiv10e6/e8/c/soMo3RMhSi//tcXRtuOKh/PyH+gQj0gjr/tY6MeJlFFA5RrUO9Ddmxr+rRvEjVr6rVpi9ZknYcZEEAAAQQQQAABBBBAoHACpH4qnDVbQgABBBBAAAEEEKiFAi0b+y+5NRZFtkp4F5mCBr97arINWswx954+0AzcrqlrtrxMG217Sjz38cKs61Llv/ZLQYN8lLGzV5pT7/40clXa1s8P6W7OtWmx0gfynrtsnbnt5Rnmz2/McgZYOtkBzCkIIIAAAggggAACCCBQOgL0qCid94I9QQABBBBAAAEEEKhAgbbN6juPSpXsk68dYd65eDdzjR3gef+BrY0CF0mKUkIdfMOH5u2JS5Mslmjeix+fGHv+8XPcA23HXsFXMyrQcPTNY5xBhmBd+w1obT78zTDzowO7ZgQp9HqHFg3M5Uf1MqPs68fYcT3C5eBBbcOTeI4AAggggAACCCCAAAJFFKiz2ZYibp9NI4AAAggggAACCCBQ0QJfzFtl9rl6pPMYZ92wd8Z09Uh4dswCc9erM82oqckG4b7/rB3MQdu3yVhfdZ+8P3mZOfLm0bFXc90Jfc3Je3SMPb9rxnU2zZO8otIznTq8k7n6uD6mTszOGxPnrTaPj5pn1qzfZA7aoY0Z1qula9NMQwABBBBAAAEEEEAAgSIJJGuyVaSdZLMIIIAAAggggAACCJSrQIuI1E/hcR/Uy+KInduZpy/YOdXT4vtf6xy7l8Vp93yatwGnA+tLHL0ptI8X2F4MrpI0uOJax7XPT40MUlz4je6pHihxgxTaRu/2jVMpoi4+vCdBChc60xBAAAEEEEAAAQQQKLIAgYoivwFsHgEEEEAAAQQQQKCyBZo39I9RoRb+vtKtTSPzmyN7mQlX72mutz0V4qSFOvO+sWZjlkGvfdsLT3/ziyVmjGOA7J/ZMSG+7kmd9NG0ZL1AwttUKiuNLeErJ+zWwfz4oG6+l5mOAAIIIIAAAggggAACZSpAoKJM3zh2GwEEEEAAAQQQQKA8BBo38F9yRwUqgqNTD4aTbDqlMb/dw3x7WHRaJaWZUtqofJTLnphUZTUKlpyzb2czqHOzKq9pwoS5q0x14iTn/228c72a2Kd9E6PUUhQEEEAAAQQQQAABBBCoPAH/XVPlHStHhAACCCCAAAIIIIBAUQQUbHCVtRE9KsLzN29U1/zhxL7mtlMGhF/KeH77K/4eCRkzRjx5Y8IS89mslVXmONsGKRSsqF+3jumxbeMqryuVlYIVuZQnP5pvRk5Z5lxU2/zHuTtWGTTbOTMTEUAAAQQQQAABBBBAoOwECFSU3VvGDiOAAAIIIIAAAgiUm0CTBnWdu1zPVvgnLUcNaWee+8ku3sUWrFhv3p201Pt6nBeufnaKc7az7ZgZQdm9Z4vgz4zHDzzBhoyZQk82bzbm4n9NDE3d+vQSO7ZEx5YNtk7gLwQQQAABBBBAAAEEEKgoAQIVFfV2cjAIIIAAAggggAACpSjQ1PaGcJX1G20NfQ5lcNdmqQGlfYu++Nki30tZp4+evsK4BsVW2qnWTetvWX43T6Di/cnuXhFbFnT88fLni4wCLK7SqVVDc9qITq6XmIYAAggggAACCCCAAAIVIkCgokLeSA4DAQQQQAABBBBAoHQFPJmfTA4dKrYc5KnDO5le7aqmX9IMk+ev3jJf0j+ufW6Kc5HzD+yaMX1o9+YZz4Mn7+UQqIgaQPsGm+6qrg8w2CiPCCCAAAIIIIAAAgggUNYCBCrK+u1j5xFAAAEEEEAAAQTKQaB+Xfdld4vG9aq1+/v0a+Vcfvqitc7p2SZOsgGOVz5fXGW2oT1amB5tG2VM79exqXGNvTFlwWqTpKfI9EVrzNsT3amqNGj31/q3ztguTxBAAAEEEEAAAQQQQKDyBNx3TJV3nBwRAggggAACCCCAAAJFE/B1CGja0J0SKu6ONm/kDnQ0rJ/bZf51z091bvoH+3WpMl3H1LdDkyrTNeGTmSuc010T73x1pmtyatp5ju16Z+YFBBBAAAEEEEAAAQQQKFuB3O5gyvZw2XEEEEAAAQQQQAABBAovsMkxFEULT5Ah7t5tsCv916h5ztm7h3o/OGcKTZy7bJ3594fzQ1ON0X5+fVDbKtM1YVfb08JV4g6orUG0//r2HNcqTMN625hDB2/rfI2JCCCAAAIIIIAAAgggUFkCBCoq6/3kaBBAAAEEEEAAAQRKUGD9xk1V9qpNs60DU1d5McuElWs3mu/e95mZudid4mlAR3dPh6jV3vHKDOfLZ+2znfH1CBnawz1ORdwBtcfOXmnWbqhqox05ZXhHU786g3g4j4aJCCCAAAIIIIAAAgggUIoC7r7ipbin7BMCCCCAAAIIIIAAAmUqsGFj1S4VnVo2SHQ0i1auNx/PWGGe+3iheeS9ud4Kfq3028M6Jlq3ggV/eXO2c5lT9+zknK6JQ7u7e1TEDVS8PmGJd92njfBv17sQLyCAAAIIIIAAAggggEBZChCoKMu3jZ1GAAEEEEAAAQQQKCeBdY5AhcanUICggR1oe9W6jUaBiAUr7P/l68385evMfPv33KVrzRgbnBg3Z5VRL4o45dThnUzbhL01/vbOHGfgY1ivlqZDC39ApVe7xqkBtZWGKr0ojZT2N9sYHP9zDNyt9Wi5Pu2T9wrRshrIe8WaDdZ0k0nfKzukhmlvj4VeGlKiIIAAAggggAACCCBQWgIEKkrr/WBvEEAAAQQQQAABBCpQYJUjyPDSZ4tMzwvfzOvR7tazhbni2N6J13nLy+60T2fsFd2roY6t/R/Qqalz8OwPpy03e/VtFbkv70xc6nx9eO+WzukKQmigbvUsGT93lZm2cI2ZtWStmWcDI8vXbHQGW8IrGtK9uXn8h4MJWIRheI4AAggggAACCCCAQBEFCFQUEZ9NI4AAAggggAACCNQOgY2hHgc1cdQa0+HyI3unejgkWf/LYxeb2bayP1w0mPU3dtw6mPVi2+NDPSUWrdxglqxab5at3mhWrN1gHzeEF009VxAiKlAxwQYafONT7Nu/dcY6ta7rnp9q3vYENjJmzvJk1NTl5uH35hj1PKEggAACCCCAAAIIIIBAaQgQqCiN94G9QAABBBBAAAEEEKhggXBqpHwe6og+rcwvD+1hx4twD2ydbVt/fHGacxYFEb52zUizyKagWmZTKSUtb36x1Pw8YqGocSz26re1J4YCFH98wb2PEauPfEmptCgIIIAAAggggAACCCBQOgIEKkrnvWBPEEAAAQQQQAABBBDIKqDxG/Yb0NocuH0bs//ANmbbhONRBBtYaAMQVzwz2YycsiyYVOVxyoLVVabFnRC1Xq1DvTN8RWNfqCxZtSHvQQqtN1czLUtBAAEEEEAAAQQQQACB/AsQqMi/KWtEAAEEEEAAAQQQQCBDoN42dUzSXhVKvbSP7VnQuXXD1MDS/To2Mfrfvrl/cOuMjUY80fgRR940OvE+Rayyyks6XqV36tvBPSj2QptKylVkpf8qY2evdM1SrWla92GDt6a0qtbKWBgBBBBAAAEEEEAAAQTyIkCgIi+MrAQBBBBAAAEEEEAAgfwKKPVSx5YNzUWH9TTNbC+KfJafPzKhRoMUwb6+M2mpN1CxYLk7UNG88dZblNXrNgWrinxs3bS+6dSygencqqHpZP+3tb1MPrEDbr9oBywPl4fP2TEV+AlP5zkCCCCAAAIIIIAAAggUT2DrXUDx9oEtI4AAAggggAACCCBQ0QJ1c+hRIZAH355t/jVqnrn6uD7m2KHt82a0yNObIW8b+GpFb05Y6h202rcPrZtsvUVRiqtBnZuZT2au2LJrCkoctUs7M8SOybFjl2amt00TJd9wOeeBz8OTUs97t/8yrZTzRSYigAACCCCAAAIIIIBAUQS23gUUZfNsFAEEEEAAAQQQQACB2inw3b23M80b1TO3/Hd6ZO+GlWs3mvP/Os7c/epMc/PJ/b09FJIonr7XduaaZ6dkXaRDC9tLwaae6tK6UarHwnb2b01Tj4U2NmDQukl9ewx1zUu258K5D1YNDLw+YYl3GxojI1upY+MPf/3+Dubh9+aa9Rs3mwPsmByDuzbLtpiR2bNjFjjna5eH1FnOFTMRAQQQQAABBBBAAAEEchYgUJEzHQsigAACCCCAAAIIIBBPQONNKJVTelmzfpP53dHdzWkjOpnLnphknvxofvrLVf4eY1MZfe2akeZPJ/U3x+9avd4Vh+7U1huouPAb3c23h3VMjYWhQEGcsnvPFs7ZFtueGxo0W8GNcPH1qJi2cE3GrAosnH9A14xp2Z6oF4prTJD+dowPR+eLbKvjdQQQQAABBBBAAAEEEKhhgW1qeP2sHgEEEEAAAQQQQACBWi9Qt27VGv+gol6V+Hd8Z4B57ie7mO23a5rV6oK/jTMXPlq9MSbusr0zfOV7+3ROBRbiBim0Ho0L0dQzjsabnl4V62wPCVdRgGH+8nWul2JNW2cDQlc8NcU57159WzmnMxEBBBBAAAEEEEAAAQSKK0Cgorj+bB0BBBBAAAEEEECgFgg0cAQq5oUGk1ZKo5d+PsRcekTPrCIPvT3HHHLDh2ZeDhX6GqD64XfnOrdx4PZtvAEH5wJpE3fp1jzt2dY/XxvvTv/UMm3Q7K1zf/nXuDmrwpNiP7/ppelm2ZoNzvlP3qOjczoTEUAAAQQQQAABBBBAoLgCBCqK68/WEUAAAQQQQAABBGqpwHybEslVztm3i3ni/MFZAwafzVppRlz5gRk5ZZlrNd5pSjHlSoukBU6yKZ9yLcN7t3Qu+uq4xc7prnRQwYz//GBe8GeiR6WZUqDCVXrZQbcHdMreY8W1LNMQQAABBBBAAAEEEECgZgUIVNSsL2tHAAEEEEAAAQQQQMApoEp1X9GYD29dtGvWVFAaNProW8aY9ybHD1bc+/os52br2cEbDrA9KnItvkCFjtPV82NgpybeTf3j/blmzlK/j29BjfXhC8L89OvdfIsxHQEEEEAAAQQQQAABBIosQKCiyG8Am0cAAQQQQAABBBConQIaXNsOx+AtGkT6Pz/dxZxuB9uOKqqYP+7WMbF6VkxbtMZ8MnOFc3Xf3GlbU9+Roso5s2PikO7u1E+a9ZWxVXtV7DcwOijyh/9MdWzFP+mR9+Z6ByTv3LqhOXpI9QYg92+ZVxBAAAEEEEAAAQQQQKC6AgQqqivI8ggggAACCCCAAAIIZBHY6IlIzIvoVaFV1rW9HK48to/500n9I7egYIV6Vnw4bXnkfKrM95VvD+vgeynW9Ab1tjF92rt7STw7ZkGVdezpSRUVzPjXd+aYsTa9VZyi9f/k4fHeWX9/dG+TZHBw74p4AQEEEEAAAQQQQAABBGpEgEBFjbCyUgQQQAABBBBAAAEEtgqsXr9p65O0v2YuWZv2zP/n8bu2N38+c3v/DPYVBSuOvGm0GT/XPxD1w55ARUMbZNirb6vI9cd5ce9+7nW88vlis35jZveRpg3rmiN3aRe52oPtgOGjp7t7gAQLvjFhiTnrL2ODp1Ue9x/Y2hw8qG2V6UxAAAEEEEAAAQQQQACB0hEgUFE67wV7ggACCCCAAAIIIFChAhpLwlVmxQxUaFlVtv/97EGu1WyZpmDFibd/bFzb07Zme7angIF6b1S37OMJVGi/nrKDeIdLtnEjtNzhf/rIOwbHU6MXmJPu/CS82i3PFQy5OUtvlC0z8wcCCCCAAAIIIIAAAggUTYBARdHo2TACCCCAAAIIIIBAbRBQZbuv+AIHvvm/1r+1efyHOxkNfO0rGrz64scnVnn5gyn+AbdP2K16aZ+Cje3Zx92jQq8/+PacYLYtj307NDHHDI0eO0J+R9082px81yepMSjenbTU/P3dOeabN35kzr5/rHfwbG3krtMGmtZN62/ZHn8ggAACCCCAAAIIIIBAaQrUK83dYq8QQAABBBBAAAEEEKgMgaWrNngPREGFpGVYr5bmqQt2TvU08AVBNBbFD/fvanq3b7xl9RPnrd7yd/of6nUwPMt4EenzR/3dvFFdM7BTUzN2dtWxJRRgUPqn8IDd1xzXx7w2brFZsGJ91KqN0kfpf9xyw4n9zH4DWsednfkQQAABBBBAAAEEEECgiAL0qCgiPptGAAEEEEAAAQQQqHyB5Wv8gYpFK6Mr5306g7s2M38/JzoN1IufLcxY3Deg9zFD2ud1oOljI3pIbNpctXeJAiWPnLujadEof22oLjm8p/lWNQcHz8DjCQIIIIAAAggggAACCNSoAIGKGuVl5QgggAACCCCAAAK1XaB+Xf8lty94EMdshE2zdNspA7yzNmuYWfG/W88Wznl/cEAX5/RcJ56x13ZGwYdw2X67pkaDdruKemG8c/FuZmgP9z66lnFNU0qsm0/ub87dL7/H5NoW0xBAAAEEEEAAAQQQQCB/Au47hfytnzUhgAACCCCAAAIIIFCrBTq3bmj6tG/iNNi9Z0vn9LgTjxrSzvz4oG5VZlfvhMMGb5sxXeNbnP21zhnTfn1YT9OtTaOMadV90rjBNubPZ26fMY6GDB77wU6Rq27VpJ558vzB5rz9cwsydGjRwPz3F0NMVI+OyB3gRQQQQAABBBBAAAEEECiaQJ3NthRt62wYAQQQQAABBBBAAIFaIPD2xKXm4n9N3DJ2gwZ4/s7wjub/vtkjL0d/83+nm+uem5oaWFpBkT+d1M/s0q25c93vT15m5i9fZ3bs0sx0zXOQIn2DS1dvMKOmLje62xjWq4Wzl0X6/Ol/v/jZInOJ9Zq2aE36ZOffCspc+I3u5tQ9O1UZ/8K5ABMRQAABBBBAAAEEEECg5AQIVJTcW8IOIYAAAggggAACCFSqwDwbINi0yZiOLRvk/RCVRkotkJT+qFLKuDmrzD8/mGsmzF1tZixeY+bZwcfr2/RRvds1Nv06NjFDuzc3h+/crqKOuVLeO44DAQQQQAABBBBAAIEkAgQqkmgxLwIIIIAAAggggAACCCCAAAIIIIAAAggggAACCORVgDEq8srJyhBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQCCJAIGKJFrMiwACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAnkVIFCRV05WhgACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAkkECFQk0WJeBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQyKsAgYq8crIyBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQSCJAoCKJFvMigAACCCCAAAIIIIAAAggggAACCCCAAAIIIIBAXgUIVOSVk5UhgAACCCCAAAIIIIAAAggggAACCCCAAAIIIIBAEgECFUm0mBcBBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQTyKkCgIq+crAwBBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQSSCBCoSKLFvAgggAACCCCAAAIIIIAAAggggAACCCCAAAIIIJBXAQIVeeVkZQgggAACCCCAAAIIIIAAAggggAACCCCAAAIIIJBEgEBFEi3mRQABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgbwKEKjIKycrQwABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgSQCBCqSaDEvAggggAACCCCAAAIIIIAAAggggAACCCCAAAII5FWAQEVeOVkZAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIJBEgUJFEi3kRQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAgrwIEKvLKycoQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAgiQCBiiRazIsAAggggAACCCCAAAIIIIAAAggggAACCCCAAAJ5FSBQkVdOVoYAAggggAACCCCAAAIIIIAAAggggAACCCCAAAJJBAhUJNFiXgQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEMirAIGKvHKyMgQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEgiQKAiiRbzIoAAAggggAACCCCAAAIIIIAAAggggAACCCCAQF4FCFTklZOVIYAAAggggAACCCCAAAIIIIAAAggggAACCCCAQBIBAhVJtJgXAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEE8ipAoCKvnKwMAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEkggQqEiixbwIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCQVwECFXnlZGUIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCQRIBARRIt5kUAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAIG8ChCoyCsnK0MAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAIEkAgQqkmgxLwIIIIAAAggggAACCCCAAAIIIIAAAggggAACCORVgEBFXjlZGQIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCQRIFCRRIt5EUAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAIK8CBCryysnKEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAIIkAgYokWsyLAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACeRUgUJFXTlaGAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACSQQIVCTRYl4EEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBDIqwCBirxysjIEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBIIkCgIokW8yKAAAIIIIAAAggggAACCCCAAAIIIIAAAggggEBeBQhU5JWTlSGAAAIIIIAAAggggAACCCCAAAIIIIAAAggggEASAQIVSbSYFwEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBPIqQKAir5ysDAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBJIIEKhIosW8CCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggkFcBAhV55WRlCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggkESAQEUSLeZFAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBvArUy+vaSnRlC1asN0tW6f8Gs27D5hLdS3YLAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAoJIE2jarb7q3bWQa1afPQNT7WjGBisUr15uXxi42L3260ExduMYstkEJBSeWr9kYdfy8hgACCCCAAAIIIIAA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AAmQAAmQAAlkRYCGiqzI87wkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAKGhgo+BCRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAApkRoKEiM/Q8MQmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAA0VfAZIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIgAQyI0BDRWboeWISIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAEaKvgMkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJZEaAhorM0PPEJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACNFTwGSABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEsiMAA0VmaHniUmABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABGio4DNAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiSQGQEaKjJDzxOTAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAnQUMFngARIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIIDMCNFRkhp4nJgESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESaEAEJEAC+Sew/ltjlq5ca9bKj4b165kmjeqZBvU2yn/FWUMSIAESKAGBb6VNnLV4tZk8f6WZIv9Wr11vdt6iteneduMSnI1FkgAJkAAJkED5CEyYvcI8+N5Ms3LNerPfoHZmx81bG3b74/NfsXq9sFvnHSVzyykAAEAASURBVLBxw/pm44b1zEYcNsUHWIv2XLPuW/P0x3PMG+MWmEHdmpuDhnYwm7RsVIuukJdCAiRAArWPAA0Vte+e8ooqiMA6MTw89+k8c+/bM8zXc1eY9bBIiKyWThUUb6tkgALjhE1O2qWL+d2PNrNt4joSIAESqDUE0AS+/eVC8/jI2WbsjGVmyoJVZsGyNdbr69e5mXn6nCGmaaP61u1cSQIkQAIkQAJ5JnDZkxPMP9+aXlXFu/433QwWBevz521V55XtcEy4R8ZMz3wy16yRzgHGTRhLrV77rVkl4yb8to2bmjWub167aJjp1qZxFVf+qP0E8Lzsev1I79nA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JFC5BJo0ogqlcu8ea04CJEACJJB3AvzK5v0OsX4kQAIkQAIkQAIkQAIkQAIkQAIkQAKZE2jeuIG1DpxRYcXClSRAAiRAAiSQiAANFYlwcWcSIAESIAESIAESIAESIAESIAESIIG6SKBv56bWy+7YspF1PVeSAAmQAAmQAAnEJ0BDRXxW3JMESIAESIAESIAESIAESIAESIAESKCOEjh0qw6mQb2Nalz9eXv3qLGOK0iABEiABEiABJIRsM9bTFYG9yYBEiABEiABEiABEiABEiABEiABEiCBWk2gV/sm5vWLh5kHR8w0//1snhnSvYU5Y/eups8m9pkWtRoGL44ESIAESIAEikyAhooiA2VxJEACJEACJEACJEACJEACJEACJEACtZPAph2amMsO6u39q51XyKsiARIgARIggWwIMPRTNtx5VhIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIgASFQVkPFt9+SOQmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAl8T6CshorvT8tfJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJFDmGRUETgIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAJBApxREaTB3yRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAmUlQENFWXHzZCRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAkECNFQEafA3CZAACZAACZAACZAACZAACZAACZAACZAACZAACZAACZBAWQnQUFFW3DwZCZAACZAACZAACZAACZAACZAACZAACZAACZAACZAACZBAkAANFUEa/E0CJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJFBWAjRUlBU3T0YCJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJBAkQENFkAZ/kwAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJlJUADRVlxc2TkQAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJBAnQUBGkwd8kQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAJlJUBDRVlx82QkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAJB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EiiXBGBcGHJp3xIZF3q2rG2e/W0v88gZPUzdGgz3VC4HCjtFAiRAAiRAAiRAAiRQKgR6tKxlrbdZvWrW5VxIAiRAAiRAAiRQsQnYpzhUbCbsPQmQQDkhsHOHeubrm3Yx/522yjw3YpH5YNxys2nrdmfvmsuL097dGpjz9m5t+rSp4yzLlSRAAiRAAiRAAiRAAiRAAnYC8HC+78M5Zuv2okFZrzionX0DLiUBEiABEiABEqjQBGioqNCHn50ngYpBYHCXBgZ/kNUFW820xRvMFPmbu2KTlxi7SZ2qpkndqqZv27oG3ykkQAIkQAIkQAIkQAIkQAIlI9ChSU3z+XUDzQtfy4ShH5d7z9oX7dvadGtu97Qo2d64NQmQAAmQAAmQQL4ToKEi348g208CJBCLQP2aVcxA8bTAH4UESIAESIAESIAESIAESKD0CHRqWtPcdGRH76/09sKaSYAESIAESIAEygMB5qgoD0eRfSABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiCBPCVAQ0WeHjg2mwRIgARIgARIgARIgARIgARIgARIgARIgARIgARIgATKAwEaKsrDUWQfSIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESCBPCdBQkacHjs0mARIgARIgARIgARIgARIgARIgARIgARIgARIgARIggfJAgIaK8nAU2QcSIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESyFMCNFTk6YFjs0mABEiABEiABEiABEiABEiABEiABEiABEiABEiABEigPBCgoaI8HEX2gQRIgARIgARIgARIgARIgARIgARIgARIgARIgARIgATylAANFXl64NhsEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEigPBGioKA9HkX0gARIgARIgARIgARIgARIgARIgARIgARIgARIgARIggTwlQENFnh44NpsESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAEygMBGirKw1FkH0iABEiABEiABEiABEiABEiABEiABEiABEiABEiABEggTwnQUJGnB47NJgESIAESIAESIAESIAESIAESIAESIAESIAESIAESIIHyQICGivJwFNkHEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEshTAjRU5OmBY7NJgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIoDwQoKGiPBxF9oEESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAE8pQADRV5euDYbBIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIoDwRoqCgPR5F9IAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIIE8JUBDRZ4eODabBEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABMoDARoqysNRZB9IgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIIE8J0FCRpweOzSYBEiABEiABEiABEiABEiABEiABEiABEiABEiABEiCB8kCAhorycBTZBxIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARLIUwI0VOTpgWOzSYAESIAESIAESIAESIAESIAESIAESIAESIAESIAESKA8EKChojwcRfaBBEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABPKUAA0VeXrg2GwSIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESKA8EaKgoD0eRfSABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiCBPCVAQ0WeHjg2mwRIgARIgARIgARIgARIgARIgARIgARIgARIgARIgATKAwEaKsrDUWQfSIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESCBPCdBQkacHjs0mARIgARIgARIgARIgARIgARIgARIgARIgARIgARIggfJAgIaK8nAU2QcSIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESyFMCNFTk6YFjs0mABEiABEiABEiABEiABEiABEiABEiABEiABEiABEigPBCoUh46wT6QAAmQAAmQAAmQAAmQAAmQAAmQAAmQQL4Q2LLtJ7N+0zaz/aefTPUqlUzNapVNpR3ypfVsJwmQAAmQAAlknwANFdlnyhpJgARIgARIgARIgARIgARIgARIgAQqIIG1G7eZl79dZF78ZrFZVbDVbN/+k9mGv5+M2bx1u9m0ZbvZKr9t8sRZPc1hOzWxreIyEiABEiABEij3BGioKPeHmB0kARIgARIgARIgARIgARIgARIgARLIBYE/vj3DPDdiUaJdnffv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5h3XEZPVgU4aPXKs3rsRPd1P8ds14t+z+TNj9wnD/ZNfrKjxeUbEQqajiOyawA+nw/DuhYKC3slSpo3WehN/OmlgtSgKpJAa2r1AUI8isfXr6I5guO+sIcY588X3G2SbBuSYl2wTBG5V6A+c4x3nlXoS69NjI6MFuU0/xrUjXha1Tow+HWupBcvhpDhCa9CwkQAJkAAJkEBjItBkm7b6uqDxN0+UhWuLY8t9ct04wZMHbCRAAiRAAiRAAiRAAiRAAiRQ1wQ2FVfImi1l0kcNkb49OWNL4q8qGBNhQK5tKyqtkLdnrpM5K4pk8bpisUW/27bMlQ7qCGmvNSTwjtQ6ewxsI3iSvL4acvFPXbRJX5tNGhxcc8vmOYLURe3USYIoEzhpYEitDWNVK5/MXS+ztRD14G4tZZzqzESUSKqc7H3FtTTVH3A6ZGPL1s8M+L06fbVM/H6jIHXXEL2XiB6pj88sPkNvzlgjr+trzoqtslhtEXAUDera0rz2VSccUpwFNRRAP/LOKdWcZYgseuWy0aEprYJ0sY8ESIAESIAEGoLAC1+tkov0QRrb8AABnOrZ3OioyOa7w72RAAmQAAmQAAmQAAmQAAmQAAmQAAnUOwFENHy9ZItGVmyWzuoU3F+jbGrjfKv3C+CCJEACJEACOzSB7dFRkdm44B369vPiSYAESIAESIAESIAESIAESIAESIAEGgMBpOga1avQvBrD9fAaSIAESIAESCDbCbCYdrbfIe6PBEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABBoxAToqGvHN5aWRAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQQLYToKMi2+8Q90cCJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACjZgAHRWN+Oby0kiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEgg2wnQUZHtd4j7IwESIAESIAESIAESIAESIAESIAESIAESIAESIAESIIFGTICOikZ8c3lpJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJJDtBOioyPY7xP2RAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQQCMmQEdFI765vDQSIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESyHYCdFRk+x3i/kiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEigEROgo6IR31xeGgmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAlkOwE6KrL9DnF/JEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJNCICdBR0YhvLi+NBEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABLKdAB0V2X6HuD8SIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESaMQE6KhoxDeXl0YCJEACJEACJEACJEACJEACJEACJEACJEACJEACJEAC2U6Ajopsv0PcHwmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAk0YgJ0VDTim8tLIwESIAESIAESIAESIAESIAESIAESIAESIAESIAESIIFsJ0BHRbbfIe6PBEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABBoxgWaN+Np4aSRAAiRAAllEYP6aYvnti/Pk3ZnrpGOrXDlml05yzWF9JTenSRbtklshARIgARIgARIgARIgARIgARIgARIgARKobwJ0VNQ3ca5HAiRAAo2YQOU2kYVri2XZ+hIpLa+UnKZNpGNhrvTrlC+n/n26GcPlL1lXIve+s1i+X7VVHjx7aCMmwksjARIgARIgARIgARIgARIgARIgARIgARJIRoCOimSEOE4CJEACJBBKoKi0Qh7+eJl5wUmRSnt1+hrB/JbNc1KZRlkSIAESIAESIAESIAESIAESIAESIAESIIFGRICOikZ0M3kpJEACJFCfBNZuKZN7NCrigfeXSDlCKdJsCzUl1JBuBWnO5jRL4NvlRfL3dxebe3HM6E6y75B2TKtl4WTR+/36/5dP5qyXMX1by/FjOkmv9i2yaHfcCgmQAAmQAAmQAAmQAAmQAAmQAAk0DAE6KhqGO1clARIgge2awEdqaP3hAzOkRNM71bYtoKOitghlm/qJjvnbVNlYXG50PTtppeQ1ayqPnj9M9typba31U0FmCDzyyTK56YV5Rtmb36yVP74yX/bfuZ08ct5w0SxpbCRAAiRAAiRAAiRAAiRAAiRAAiSwwxJousNeOS+cBEiABEggZQIwiN/22gI5WetNZMJJgQ2kmi4q5U3vABO+Wbol5qSwl4v7c/a/vpGtpbV3JlmdfK8dgZemrq6h4B0t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tTYFoymceDhAAiRAAiRAAiRAAjscAToqdrhbzgsmARIgARIgARIgARIgARIggbolcOebC0OjKU7drUvdboDaSYAESIAESIAESIAEtisCdFRsV7eLmyUBEiABEiABEiABEiABEiCB7CawdkuZPPjhUucmrz+yr+SwNoWTDwdIgARIgARIgARIYEckQEfFjnjXec0kQAIkQAIkQAIkQAIkQAIkUEcE/vqGO5qiY2GunDyO0RR1hJ5qSYAESIAESIAESGC7JUBHxXZ767hxEiABEiABEiABEiABEiABEsguAms2l8nDHy9zbur6o/oxmsJJhwMkQAIkQAIkQAIksOMSoKNix733vHISIAESIAESIAESIAESIAESyCiB20OiKbq0bi4njmU0RUaBUxkJkAAJkAAJkAAJNBICdFQ0khvJyyABEiABEiABEiABEiABEiCBhibw1MQVzi0gmoKlKZx4OEACJEACJEACJEACOzQBOip26NvPiycBEiABEiABEiABEiABEiCBzBBYuLZYtpRUBCpDNMVxYzoHjrGTBEiABEiABEiABEiABOio4GeABEiABEiABEiABEiABEiABEig1gTa5jdz6rjxaEZTOOFwgARIgARIgARIgARIQOio4IeABEiABEiABEiABEiABEiABEig1gRaq6Pi5wf0qqGnb8d8OXYXRlPUAMMOEiABEiABEiABEiCBGAE6KmIoeEACJEACJEACJEACJEACJEACJFAbAtcc3lfO3rO75DXz/tQ8aGh7ef3yXaRJk9po5VwSIAESIAESIAESIIHGTsAdm9vYr5zXRwIkQAIkQAIkQAIkQAIkQAIkkFECKJb9++MHyM3HDZBtqpnFszOKl8pIgARIgARIgARIoNESqFdHBX5RZSMBEiABEiABEiABEiABEiABEmjcBBBBwSCKxn2PeXUkQAIkQAIkQAIkkEkCTP2USZrURQIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkkBIBOipSwkVhEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiCBTBKgoyKTNKmLBEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEggJQJ0VKSEi8IkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAKZJEBHRSZpUhcJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkEBKBOioSAkXhUmABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABDJJgI6KTNKkLhIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIggZQI0FGREi4KkwAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJZJIAHRWZpEldJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACKRGgoyIlXBQmARIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARLIJAE6KjJJk7pIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARSIkBHRUq4KEwCJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJJBJAnRUZJImdZEACZAACZAACZAACZAACZAACZAACZAACZAACZAACZAACaREgI6KlHBRmARIgARIgARIgARIgARIgARIgARIgARIgARIgARIgARIIJMEmmVSGXWRAAmQAAmQAAmQAAmQAAmQAAmQAAhs27ZNthFFoyLQRK+mSRP8zGCbO1dk4MAMKqQqEiABEiABEiCB7ZEAHRXb413jnkmABEiABEiABEiABEiABEggiwjAKVFcUiLrN26WTZu36Psm2ajvpRWV6rDwNlo783aV06OJJGjSUyzRxHpF7LA9D+AEbYl6PHGjycywanAS67Wd9qKq7SUmZebbM7vzqvXie6yUmaLrYF9o3s/E87gheILMqXoOzDvuAeY1ie3WWyfWYwCprJnmz62m0FNX82fVOjlNm0ir/HxpXVgg7du1kVaFLaVAz5s2rUWyhi5dai7JHhIgARIgARIggR2OAB0VO9wt5wWTAAmQAAmQAAmQAAmQAAmQQOYIwCkx+etZMn3mbFm6fIUUbdkqJaWlUlpeJpWVsIt7hm7PnJ7+uta0Dj04junzbe+pOSri5vtbsvrtDmP649eznUa42i7stNi7HbXvsQGjz+u16uyY11s1o+rISui7nYRBtLjzRHl7bt4hFz/HHhsl0X40UUdFbk6ONM/NlZYt89VZ0VaGDxkkY0cOla6dOqTnsGjVKtrilCIBEiABEiABEmjUBOioaNS3lxdHAiRAAiRAAiRAAiRAAiRAAnVHYPW69fLgk8/L1K9nSsnWIjVgN5OW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ARIVnZgIQgABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgXEIkKgYhyp9IoAAAggggAACCCCAAAIIIIAAAggggAACCCCAQCcBEhWdmAhCAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBcQiQqBiHKn0igAACCCCAAAIIIIAAAggggAACCCCAAAIIIIBAJwESFZ2YCEIAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAIFxCJCoGIcqfSKAAAIIIIAAAggggAACCCCAAAIIIIAAAggggEAnARIVnZgIQgABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgXEIkKgYhyp9IoAAAggggAACCCCAAAIIIIAAAggggAACCCCAQCcBEhWdmAhCAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBcQiQqBiHKn0igAACCCCAAAIIIIAAAggggAACCCCAAAIIIIBAJwESFZ2YCEIAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAIFxCJCoGIcqfSKAAAIIIIAAAggggAACCCCAAAIIIIAAAggggEAnARIVnZgIQgABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgXEIkKgYhyp9IoAAAggggAACCCCAAAIIIIAAAggggAACCCCAQCcBEhWdmAhCAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBcQiQqBiHKn0igAACCCCAAAIIIIAAAggggAACCCCAAAIIIIBAJwESFZ2YCEIAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAIFxCJCoGIcqfSKAAAIIIIAAAggggAACCCCAAAIIIIAAAggggEAnARIVnZgIQgABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgXEIkKgYhyp9IoAAAggggAACCCCAAAIIIIAAAggggAACCCCAQCcBEhWdmAhCAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBcQiQqBiHKn0igAACCCCAAAIIIIAAAggggAACCCCAAAIIIIBAJwESFZ2YCEIAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAIFxCJCoGIcqfSKAAAIIIIAAAggggAACCCCAAAIIIIAAAggggEAnARIVnZgIQgABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgXEIkKgYhyp9IoAAAggggAACCCCAAAIIIIAAAggggAACCCCAQCcBEhWdmAhCAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBcQiQqBiHKn0igAACCCCAAAIIIIAAAggggAACCCCAAAIIIIBAJwESFZ2YCEIAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAIFxCJCoGIcqfSKAAAIIIIAAAggggAACCCCAAAIIIIAAAggggEAnARIVnZgIQgABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgXEIkKgYhyp9IoAAAggggAACCCCAAAIIIIAAAggggAACCCCAQCcBEhWdmAhCAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBcQiQqBiHKn0igAACCCCAAAIIIIAAAggggAACCCCAAAIIIIBAJwESFZ2YCEIAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAIFxCJCoGIcqfSKAAAIIIIAAAggggAACCCCAAAIIIIAAAggggEAnARIVnZgIQgABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgXEIkKgYhyp9IoAAAggggAACCCCAAAIIIIAAAggggAACCCCAQCcBEhWdmAhCAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBcQiQqBiHKn0igAACCCCAAAIIIIAAAggggAACCCCAAAIIIIBAJwESFZ2YCEIAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAIFxCJCoGIcqfSKAAAIIIIAAAggggAACCCCAAAIIIIAAAggggEAnARIVnZgIQgABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgXEIkKgYhyp9IoAAAggggAACCCCAAAIIIIAAAggggAACCCCAQCcBEhWdmAhCAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBcQiQqBiHKn0igAACCCCAAAIIIIAAAggggAACCCCAAAIIIIBAJwESFZ2YCEIAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAIFxCJCoGIcqfSKAAAIIIIAAAggggAACCCCAAAIIIIAAAggggEAnARIVnZgIQgABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgXEIkKgYhyp9IoAAAggggAACCCCAAAIIIIAAAggggAACCCCAQCcBEhWdmAhCAAEEEEAAAQQQQAABBBBAAAEE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FULUuyp+/tcfXfX28osB331guycsrtk5XXZt2Vh22jO69JyunVviR+ckMy6mSD0CCCCAAAIIIIAAAggggAACCCCAAAIIIIDAqxU4fGq+6OeI/bx0Ms4Pn5orh+38iaPny9P2M8rxiz92S/np77l+lCZXRewVm6hIvc8+/Io9h+u58vVnT2cR3wgggAACCCCAAAIIIIAAAggggAACCCCAAAIIvGEEtIvi79u7m2/ev+V1ec9XfKIi1T//2InyLx54rvz5EyeyiG8EEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBF63Aj9173Xl5y1BccPuTa/be9SNXTWJivwtPHdstnzuO8f9pdtKXpw8v5hVfCOAAAIIIIAAAggggAACCCCAAAIIIIAAAgggcNUK7Ng8WX7gzr3lB+/cU7739j1F12+E46pLVAz+Ur556ExRwuJB22nxoj3XSy8f0TO/OBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQuFIFtm+aLHu3byz7d0yX97xlxpMT77tl55U63bHO66pPVKylo5dxK2lx7OximV9c9syTXqi9w370HwAHAggggAACCCCAAAIIIIAAAggggAACCCCAAALjFDh0fM5eoj1na9QrPszMFktObNtYrtv1+n6U06imr9tExagQxCOAAAIIIIAAAggggAACCCCAAAIIIIAAAggggMDlF5i4/EMyIgIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCAQAiQq+C8BAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEE1k2ARMW60TMwAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIkKjgvwEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBYNwESFetGz8AIIIAAAggggAACCCCAAAIIIIAAAggggAACCCBAooL/BhBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQGDdBEhUrBs9AyOAAAIIIIAAAggggAACCCCAAAIIIIAAAggggACJCv4bQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgXUTIFGxbvQMjAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAiQq+G8AAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEE1k2ARMW60TMwAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIkKjgvwEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBYNwESFetGz8AIIIAAAggggAACCCCAAAIIIIAAAggggAACCCBAooL/BhBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQGDdBEhUrBs9AyOAAAIIIIAAAggggAACCCCAAAIIIIAAAggggACJCv4bQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgXUTIFGxbvQMjAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAiQq+G8AAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEE1k2ARMW60TMwAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIkKjgvwEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBYNwESFetGz8AIIIAAAggggAACCCCAAAIIIIAAAggggAACCCBAooL/BhBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQGDdBEhUrBs9AyOAAAIIIIAAAggggAACCCCAAAIIIIAAAggggACJCv4bQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgXUTIFGxbvQMjAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAiQq+G8AAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEE1k2ARMW60TMwAggggAACCCCAAAIIIIAAAggggAACCCCAAAII/P+LiZJYuxO3UAAAAABJRU5ErkJggg=="
|
||
}
|
||
},
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"# RAG (Retrieval-Augmented Generation)\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"## What it is\n",
|
||
"\n",
|
||
"*Retrieval-Augmented Generation (RAG) is the act of selectively adding relevant information to help the LLM generate a better response.*\n",
|
||
"\n",
|
||
"## Why it helps\n",
|
||
"\n",
|
||
"* Avoids [Context Confusion](https://www.dbreunig.com/2025/06/22/how-contexts-fail-and-how-to-fix-them.html): Context Confusion happens when superfluous information in the context is used by the model to generate a low-quality response. RAG ensures that only relevant context is presented to the model.\n",
|
||
"\n",
|
||
"* Reinforces [“context is king, not prompts”](https://x.com/jxnlco/status/1945490018127987092): As Walden Yan of Cognition said, *\"models are already smart; What limits them now isn’t clever prompting but how much context they have about your task and their previous actions.\"* RAG is an effective way to supply relevant, task-specific context to the model.\n",
|
||
"\n",
|
||
"## RAG in Practice\n",
|
||
"\n",
|
||
"[RAG](https://github.com/langchain-ai/rag-from-scratch) is an extremely rich topic. For example, code agents are some of the best examples of RAG in large-scale production and [Varun from Windsurf captures some of these challenges well](https://x.com/_mohansolo/status/1899630246862966837):\n",
|
||
"\n",
|
||
"> Indexing code ≠ context retrieval … [We are doing indexing & embedding search … [with] AST parsing code and chunking along semantically meaningful boundaries … embedding search becomes unreliable as a retrieval heuristic as the size of the codebase grows … we must rely on a combination of techniques like grep/file search, knowledge graph based retrieval, and … a re-ranking step where [context] is ranked in order of relevance. \n",
|
||
"\n",
|
||
"## RAG in LangGraph\n",
|
||
"\n",
|
||
"We have several [tutorials and videos](https://langchain-ai.github.io/langgraph/tutorials/rag/langgraph_agentic_rag/) that show how to use RAG with LangGraph. Let's build a simple RAG agent with a retrieval tool!"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 10,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"from langchain_community.document_loaders import WebBaseLoader\n",
|
||
"\n",
|
||
"# Let's index a few of Lilian Weng's blog posts\n",
|
||
"urls = [\n",
|
||
" \"https://lilianweng.github.io/posts/2025-05-01-thinking/\",\n",
|
||
" \"https://lilianweng.github.io/posts/2024-11-28-reward-hacking/\",\n",
|
||
" \"https://lilianweng.github.io/posts/2024-07-07-hallucination/\",\n",
|
||
" \"https://lilianweng.github.io/posts/2024-04-12-diffusion-video/\",\n",
|
||
"]\n",
|
||
"\n",
|
||
"# Load documents from each URL\n",
|
||
"docs = [WebBaseLoader(url).load() for url in urls]"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 11,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"from langchain_text_splitters import RecursiveCharacterTextSplitter\n",
|
||
"\n",
|
||
"# Flatten the list of documents\n",
|
||
"docs_list = [item for sublist in docs for item in sublist]\n",
|
||
"\n",
|
||
"# Initialize text splitter \n",
|
||
"text_splitter = RecursiveCharacterTextSplitter.from_tiktoken_encoder(\n",
|
||
" chunk_size=2000, \n",
|
||
" chunk_overlap=50\n",
|
||
")\n",
|
||
"\n",
|
||
"# Split documents into chunks\n",
|
||
"doc_splits = text_splitter.split_documents(docs_list)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"`as_retriever` [defaults to 4 retrieved chunks](https://api.python.langchain.com/en/latest/_modules/langchain_core/vectorstores.html#VectorStore.as_retriever)."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 12,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"from langchain.embeddings import init_embeddings\n",
|
||
"from langchain_core.vectorstores import InMemoryVectorStore\n",
|
||
"\n",
|
||
"# Initialize embeddings model\n",
|
||
"embeddings = init_embeddings(\"openai:text-embedding-3-small\")\n",
|
||
"\n",
|
||
"# Create in memory vector store from documents\n",
|
||
"vectorstore = InMemoryVectorStore.from_documents(\n",
|
||
" documents=doc_splits, \n",
|
||
" embedding=embeddings\n",
|
||
")\n",
|
||
"\n",
|
||
"# Create retriever from vector store\n",
|
||
"retriever = vectorstore.as_retriever()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 13,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# Results are a list of Document objects\n",
|
||
"r = retriever.invoke(\"types of reward hacking\")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"The `retriever_tool` just concatenates the content of the retrieved Documents."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 14,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #008000; text-decoration-color: #008000; font-weight: bold\">Retriever Tool Results:</span>\n",
|
||
"</pre>\n"
|
||
],
|
||
"text/plain": [
|
||
"\u001b[1;32mRetriever Tool Results:\u001b[0m\n"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">Content:</span>\n",
|
||
"</pre>\n"
|
||
],
|
||
"text/plain": [
|
||
"\n",
|
||
"\u001b[33mContent:\u001b[0m\n"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">s in two RL environments, CoinRun and Maze, demonstrated the importance of randomization during </span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">training. If during training, the coin or the cheese is placed at a fixed position </span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0; font-weight: bold\">(</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">i.e. right end </span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">of the level or upper right corner of the maze</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0; font-weight: bold\">)</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\"> but testing in the env where the coin or cheese is </span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">placed at random, the agent would just run to the fixed position without obtaining the coin or </span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">cheese at test time. A conflict arises when a visual feature </span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0; font-weight: bold\">(</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">e.g., cheese or coin</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0; font-weight: bold\">)</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\"> and a positional</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">feature </span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0; font-weight: bold\">(</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">e.g., upper-right or right end</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0; font-weight: bold\">)</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\"> are inconsistent during test time, leading the trained </span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">model to prefer the positional feature. I would like to point out that, in these two examples, the </span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">reward-result gaps are clear but such type of biases are unlikely to be so obvious in most </span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">real-world cases.</span>\n",
|
||
"\n",
|
||
"\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">The impact of randomizing the position of the coin during training. When the coin is placed at </span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">random for </span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0; font-weight: bold\">{</span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">0</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">, </span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">2</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">, </span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">3</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">, </span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">6</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">, </span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">11</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0; font-weight: bold\">}</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">% of the time during training </span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0; font-weight: bold\">(</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">x-axis</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0; font-weight: bold\">)</span><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">, the frequency of the agent navig</span>\n",
|
||
"</pre>\n"
|
||
],
|
||
"text/plain": [
|
||
"\u001b[37ms in two RL environments, CoinRun and Maze, demonstrated the importance of randomization during \u001b[0m\n",
|
||
"\u001b[37mtraining. If during training, the coin or the cheese is placed at a fixed position \u001b[0m\u001b[1;37m(\u001b[0m\u001b[37mi.e. right end \u001b[0m\n",
|
||
"\u001b[37mof the level or upper right corner of the maze\u001b[0m\u001b[1;37m)\u001b[0m\u001b[37m but testing in the env where the coin or cheese is \u001b[0m\n",
|
||
"\u001b[37mplaced at random, the agent would just run to the fixed position without obtaining the coin or \u001b[0m\n",
|
||
"\u001b[37mcheese at test time. A conflict arises when a visual feature \u001b[0m\u001b[1;37m(\u001b[0m\u001b[37me.g., cheese or coin\u001b[0m\u001b[1;37m)\u001b[0m\u001b[37m and a positional\u001b[0m\n",
|
||
"\u001b[37mfeature \u001b[0m\u001b[1;37m(\u001b[0m\u001b[37me.g., upper-right or right end\u001b[0m\u001b[1;37m)\u001b[0m\u001b[37m are inconsistent during test time, leading the trained \u001b[0m\n",
|
||
"\u001b[37mmodel to prefer the positional feature. I would like to point out that, in these two examples, the \u001b[0m\n",
|
||
"\u001b[37mreward-result gaps are clear but such type of biases are unlikely to be so obvious in most \u001b[0m\n",
|
||
"\u001b[37mreal-world cases.\u001b[0m\n",
|
||
"\n",
|
||
"\n",
|
||
"\u001b[37mThe impact of randomizing the position of the coin during training. When the coin is placed at \u001b[0m\n",
|
||
"\u001b[37mrandom for \u001b[0m\u001b[1;37m{\u001b[0m\u001b[1;36m0\u001b[0m\u001b[37m, \u001b[0m\u001b[1;36m2\u001b[0m\u001b[37m, \u001b[0m\u001b[1;36m3\u001b[0m\u001b[37m, \u001b[0m\u001b[1;36m6\u001b[0m\u001b[37m, \u001b[0m\u001b[1;36m11\u001b[0m\u001b[1;37m}\u001b[0m\u001b[37m% of the time during training \u001b[0m\u001b[1;37m(\u001b[0m\u001b[37mx-axis\u001b[0m\u001b[1;37m)\u001b[0m\u001b[37m, the frequency of the agent navig\u001b[0m\n"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"from langchain.tools.retriever import create_retriever_tool\n",
|
||
"from utils import format_retriever_results\n",
|
||
"\n",
|
||
"# Create retriever tool\n",
|
||
"retriever_tool = create_retriever_tool(\n",
|
||
" retriever,\n",
|
||
" \"retrieve_blog_posts\",\n",
|
||
" \"Search and return information about Lilian Weng blog posts.\",\n",
|
||
")\n",
|
||
"\n",
|
||
"# Test the retriever tool\n",
|
||
"result = retriever_tool.invoke({\"query\": \"types of reward hacking\"})\n",
|
||
"format_retriever_results(result[10:1000])"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 15,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import getpass\n",
|
||
"import os\n",
|
||
"\n",
|
||
"from langchain.chat_models import init_chat_model\n",
|
||
"\n",
|
||
"def _set_env(var: str) -> None:\n",
|
||
" \"\"\"Set environment variable if not already set.\n",
|
||
" \n",
|
||
" Args:\n",
|
||
" var: Environment variable name\n",
|
||
" \"\"\"\n",
|
||
" if not os.environ.get(var):\n",
|
||
" os.environ[var] = getpass.getpass(f\"{var}: \")\n",
|
||
"\n",
|
||
"# Set up API key\n",
|
||
"_set_env(\"ANTHROPIC_API_KEY\")\n",
|
||
"\n",
|
||
"# Initialize language model\n",
|
||
"llm = init_chat_model(\"anthropic:claude-sonnet-4-20250514\", temperature=0)\n",
|
||
"\n",
|
||
"# Bind tools\n",
|
||
"tools = [retriever_tool]\n",
|
||
"tools_by_name = {tool.name: tool for tool in tools}\n",
|
||
"\n",
|
||
"# Bind tools to LLM for agent functionality\n",
|
||
"llm_with_tools = llm.bind_tools(tools)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 16,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "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",
|
||
"text/plain": [
|
||
"<IPython.core.display.Image object>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"from typing_extensions import Literal\n",
|
||
"from IPython.display import Image, display\n",
|
||
"from langchain_core.messages import SystemMessage, ToolMessage\n",
|
||
"from langgraph.graph import END, START, StateGraph, MessagesState\n",
|
||
"\n",
|
||
"# Define the RAG agent system prompt\n",
|
||
"rag_prompt = \"\"\"You are a helpful assistant tasked with retrieving information from a series of technical blog posts by Lilian Weng. \n",
|
||
"Clarify the scope of research with the user before using your retrieval tool to gather context. Reflect on any context you fetch, and\n",
|
||
"proceed until you have sufficient context to answer the user's research request.\"\"\"\n",
|
||
"\n",
|
||
"def llm_call(state: MessagesState) -> dict:\n",
|
||
" \"\"\"LLM decides whether to call a tool or not.\n",
|
||
" \n",
|
||
" Args:\n",
|
||
" state: Current conversation state\n",
|
||
" \n",
|
||
" Returns:\n",
|
||
" Dictionary with new messages\n",
|
||
" \"\"\"\n",
|
||
" return {\n",
|
||
" \"messages\": [\n",
|
||
" llm_with_tools.invoke(\n",
|
||
" [SystemMessage(content=rag_prompt)] + state[\"messages\"]\n",
|
||
" )\n",
|
||
" ]\n",
|
||
" }\n",
|
||
" \n",
|
||
"def tool_node(state: MessagesState) -> dict:\n",
|
||
" \"\"\"Performs the tool call.\n",
|
||
" \n",
|
||
" Args:\n",
|
||
" state: Current conversation state with tool calls\n",
|
||
" \n",
|
||
" Returns:\n",
|
||
" Dictionary with tool results\n",
|
||
" \"\"\"\n",
|
||
" result = []\n",
|
||
" for tool_call in state[\"messages\"][-1].tool_calls:\n",
|
||
" tool = tools_by_name[tool_call[\"name\"]]\n",
|
||
" observation = tool.invoke(tool_call[\"args\"])\n",
|
||
" result.append(ToolMessage(content=observation, tool_call_id=tool_call[\"id\"]))\n",
|
||
" return {\"messages\": result}\n",
|
||
"\n",
|
||
"def should_continue(state: MessagesState) -> Literal[\"tool_node\", \"__end__\"]:\n",
|
||
" \"\"\"Decide if we should continue the loop or stop based upon whether the LLM made a tool call.\n",
|
||
" \n",
|
||
" Args:\n",
|
||
" state: Current conversation state\n",
|
||
" \n",
|
||
" Returns:\n",
|
||
" Next node to execute\n",
|
||
" \"\"\"\n",
|
||
" messages = state[\"messages\"]\n",
|
||
" last_message = messages[-1]\n",
|
||
" \n",
|
||
" # If the LLM makes a tool call, then perform an action\n",
|
||
" if last_message.tool_calls:\n",
|
||
" return \"tool_node\"\n",
|
||
" # Otherwise, we stop (reply to the user)\n",
|
||
" return END\n",
|
||
"\n",
|
||
"# Build workflow\n",
|
||
"agent_builder = StateGraph(MessagesState)\n",
|
||
"\n",
|
||
"# Add nodes\n",
|
||
"agent_builder.add_node(\"llm_call\", llm_call)\n",
|
||
"agent_builder.add_node(\"tool_node\", tool_node)\n",
|
||
"\n",
|
||
"# Add edges to connect nodes\n",
|
||
"agent_builder.add_edge(START, \"llm_call\")\n",
|
||
"agent_builder.add_conditional_edges(\n",
|
||
" \"llm_call\",\n",
|
||
" should_continue,\n",
|
||
" {\n",
|
||
" \"tool_node\": \"tool_node\",\n",
|
||
" END: END,\n",
|
||
" },\n",
|
||
")\n",
|
||
"agent_builder.add_edge(\"tool_node\", \"llm_call\")\n",
|
||
"\n",
|
||
"# Compile the agent\n",
|
||
"agent = agent_builder.compile()\n",
|
||
"\n",
|
||
"# Show the agent\n",
|
||
"display(Image(agent.get_graph(xray=True).draw_mermaid_png()))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 17,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #000080; text-decoration-color: #000080\">╭─────────────────────────────────────────────────── 🧑 Human ────────────────────────────────────────────────────╮</span>\n",
|
||
"<span style=\"color: #000080; text-decoration-color: #000080\">│</span> What are the types of reward hacking discussed in the blogs? <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
|
||
"<span style=\"color: #000080; text-decoration-color: #000080\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
|
||
"</pre>\n"
|
||
],
|
||
"text/plain": [
|
||
"\u001b[34m╭─\u001b[0m\u001b[34m──────────────────────────────────────────────────\u001b[0m\u001b[34m 🧑 Human \u001b[0m\u001b[34m───────────────────────────────────────────────────\u001b[0m\u001b[34m─╮\u001b[0m\n",
|
||
"\u001b[34m│\u001b[0m What are the types of reward hacking discussed in the blogs? \u001b[34m│\u001b[0m\n",
|
||
"\u001b[34m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">╭───────────────────────────────────────────────────── 📝 AI ─────────────────────────────────────────────────────╮</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> I'll help you find information about reward hacking types discussed in Lilian Weng's blog posts. Let me search <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> for relevant content on this topic. <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> 🔧 Tool Call: retrieve_blog_posts <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> Args: { <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> \"query\": \"reward hacking types\" <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> } <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
|
||
"</pre>\n"
|
||
],
|
||
"text/plain": [
|
||
"\u001b[37m╭─\u001b[0m\u001b[37m────────────────────────────────────────────────────\u001b[0m\u001b[37m 📝 AI \u001b[0m\u001b[37m────────────────────────────────────────────────────\u001b[0m\u001b[37m─╮\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m I'll help you find information about reward hacking types discussed in Lilian Weng's blog posts. Let me search \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m for relevant content on this topic. \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m 🔧 Tool Call: retrieve_blog_posts \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m Args: { \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m \"query\": \"reward hacking types\" \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m } \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #808000; text-decoration-color: #808000\">╭──────────────────────────────────────────────── 🔧 Tool Output ─────────────────────────────────────────────────╮</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward Hacking in Reinforcement Learning | Lil'Log <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Lil'Log <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> | <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Posts <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Archive <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Search <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Tags <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> FAQ <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward Hacking in Reinforcement Learning <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Date: November 28, 2024 | Estimated Reading Time: 37 min | Author: Lilian Weng <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Table of Contents <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Background <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward Function in RL <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Spurious Correlation <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Let’s Define Reward Hacking <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> List of Examples <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward hacking examples in RL tasks <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward hacking examples in LLM tasks <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward hacking examples in real life <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Why does Reward Hacking Exist? <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Hacking RL Environment <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Hacking RLHF of LLMs <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Hacking the Training Process <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Hacking the Evaluator <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> In-Context Reward Hacking <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Generalization of Hacking Skills <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Peek into Mitigations <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> RL Algorithm Improvement <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Detecting Reward Hacking <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Data Analysis of RLHF <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Citation <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> References <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward hacking occurs when a reinforcement learning (RL) agent exploits flaws or ambiguities in the reward <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> function to achieve high rewards, without genuinely learning or completing the intended task. Reward hacking <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> exists because RL environments are often imperfect, and it is fundamentally challenging to accurately specify a <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> reward function. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> With the rise of language models generalizing to a broad spectrum of tasks and RLHF becomes a de facto method <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> for alignment training, reward hacking in RL training of language models has become a critical practical <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> challenge. Instances where the model learns to modify unit tests to pass coding tasks, or where responses <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> contain biases that mimic a user’s preference, are pretty concerning and are likely one of the major blockers <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> for real-world deployment of more autonomous use cases of AI models. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Most of the past work on this topic has been quite theoretical and focused on defining or demonstrating the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> existence of reward hacking. However, research into practical mitigations, especially in the context of RLHF <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> and LLMs, remains limited. I especially want to call out for more research efforts directed toward <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> understanding and developing mitigation for reward hacking in the future. Hope I will be able to cover the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> mitigation part in a dedicated post soon. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Background# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward Function in RL# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward function defines the task, and reward shaping significantly impacts learning efficiency and accuracy in <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> reinforcement learning. Designing a reward function for an RL task often feels like a ‘dark art’. Many factors <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> contribute to this complexity: How you decompose a big goal into small goals? Is the reward sparse or dense? <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> How you measure the success? Various choices may lead to good or problematic learning dynamics, including <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> unlearnable tasks or hackable reward functions. There is a long history of research on how to do reward shaping <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> in RL. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> For example, in an 1999 paper by Ng et al., the authors studied how to modify the reward function in Markov <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Decision Processes (MDPs) such that the optimal policy remains unchanged. They found that linear transformation <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> works. Given a MDP $M = (S, A, T, \\gamma, R)$, we want to create a transformed MDP $M’ = (S, A, T, \\gamma, R’)$ <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> where $R’ = R + F$ and $F: S \\times A \\times S \\mapsto \\mathbb{R}$, such that we can guide the learning <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> algorithm to be more efficient. Given a real-valued function $\\Phi: S \\mapsto \\mathbb{R}$, $F$ is a <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> potential-based shaping function if for all $s \\in S - {s_0}, a \\in A, s’ \\in S$: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> $$ <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> F(s, a, s') = \\gamma \\Phi(s') - \\Phi(s) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> $$ <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> This would guarantee that the sum of discounted $F$, $F(s_1, a_1, s_2) + \\gamma F(s_2, a_2, s_3) + \\dots$, ends <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> up being 0. If $F$ is such a potential-based shaping function, it is both sufficient and necessary to ensure <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> $M$ and $M’$ share the same optimal policies. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> When $F(s, a, s’) = \\gamma \\Phi(s’) - \\Phi(s)$, and if we further assume that $\\Phi(s_0) = 0$, where $s_0$ is <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> absorbing state, and $\\gamma=1$, and then for all $s \\in S, a \\in A$: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> $$ <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> \\begin{aligned} <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Q^*_{M'} (s,a) &= Q^*_M(s, a) - \\Phi(s) \\\\ <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> V^*_{M'} (s,a) &= V^*_M(s, a) - \\Phi(s) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> \\end{aligned} <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> $$ <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> This form of reward shaping allows us to incorporate heuristics into the reward function to speed up learning <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> without impacting the optimal policy. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Spurious Correlation# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Spurious correlation or shortcut learning (Geirhos et al. 2020) in classification task is a concept closely <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> related to reward hacking. Spurious or shortcut features can cause a classifier to fail at learning and <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> generalizing as intended. For example, a binary classifier for distinguishing wolves from huskies may overfit <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> to the presence of a snowy background if all the wolf training images include snow (Ribeiro et al. 2024). <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The model performs poorly on out-of-distribution (OOD) test sets if it overfits to shortcut features. (Image <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> source: Geirhos et al. 2020) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The ERM principle states that, since the full data distribution is unknown, minimizing the loss on training <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> data is a reasonable proxy of risk and thus we favor models with the lowest training loss. Nagarajan et al. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> (2021) studied the ERM principle and pointed out that ERM needs to rely on all types of informative features, <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> including unreliable spurious features, while attempting to fit the data without constraints. Their experiments <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> showed that ERM would depend on spurious features no matter how easy the task is. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Let’s Define Reward Hacking# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward shaping in RL is challenging. Reward hacking occurs when an RL agent exploits flaws or ambiguities in <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> the reward function to obtain high rewards without genuinely learning the intended behaviors or completing the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> task as designed. In recent years, several related concepts have been proposed, all referring to some form of <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> reward hacking: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward hacking (Amodei et al., 2016) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward corruption (Everitt et al., 2017) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward tampering (Everitt et al. 2019) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Specification gaming (Krakovna et al., 2020) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Objective robustness (Koch et al. 2021) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Goal misgeneralization (Langosco et al. 2022) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward misspecifications (Pan et al. 2022) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The concept originated with Amodei et al. (2016), who proposed a set of open research questions on AI safety in <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> their seminal paper “Concrete Problems in AI Safety”. They listed reward hacking as one of the key AI safety <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> problems. Reward hacking refers to the possibility of the agent gaming the reward function to achieve high <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> reward through undesired behavior. Specification gaming (Krakovna et al. 2020) is a similar concept, defined <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> as a behavior that satisfies the literal specification of an objective but not achieving the desired results. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Here the literal description of the task goal and the intended goal may have a gap. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward shaping is a technique used to enrich the reward function, making it easier for the agent to learn—for <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> example, by providing denser rewards. However, a poorly design reward shaping mechanism can alter the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> trajectory of the optimal policy. Designing effective reward shaping mechanisms is inherently difficult. Rather <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> than blaming a poorly designed reward function, it is more accurate to acknowledge that designing a good reward <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> function is intrinsically challenging due to the complexity of the task itself, partial observable state, <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> multiple dimensions in consideration, and other factors. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> When testing an RL agent in out-of-distribution (OOD) environments, robustness failure may occur due to: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The model fails to generalize effectively, even with the right objective. This happens when the algorithm lacks <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> sufficient intelligence or capability. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The model generalizes capably but pursues an objective different from the one it was trained on. This happens <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> when the proxy reward differs from the true reward function, $R’ \\neq R$. This is known as objective robustness <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> (Koch et al. 2021) or goal misgeneralization (Langosco et al. 2022 ) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Experiments in two RL environments, CoinRun and Maze, demonstrated the importance of randomization during <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> training. If during training, the coin or the cheese is placed at a fixed position (i.e. right end of the level <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> or upper right corner of the maze) but testing in the env where the coin or cheese is placed at random, the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> agent would just run to the fixed position without obtaining the coin or cheese at test time. A conflict arises <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> when a visual feature (e.g., cheese or coin) and a positional feature (e.g., upper-right or right end) are <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> inconsistent during test time, leading the trained model to prefer the positional feature. I would like to <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> point out that, in these two examples, the reward-result gaps are clear but such type of biases are unlikely to <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> be so obvious in most real-world cases. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The impact of randomizing the position of the coin during training. When the coin is placed at random for {0, <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> 2, 3, 6, 11}% of the time during training (x-axis), the frequency of the agent navigating to the end of the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> level without obtaining the coin decreases with the increase of the randomization (\"y-axis\"). (Image source: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Koch et al. 2021) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward Tampering (Everitt et al. 2019) is a form of reward hacking behavior where the agent interferes with the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> reward function itself, causing the observed reward to no longer accurately represent the intended goal. In <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> reward tampering, the model modifies its reward mechanism either by directly manipulating the implementation of <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> the reward function or by indirectly altering the environmental information used as input for the reward <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> function. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> (Note: Some work defines reward tampering as a distinct category of misalignment behavior from reward hacking. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> But I consider reward hacking as a broader concept here.) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> At a high level, reward hacking can be categorized into two types: environment or goal misspecification, and <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> reward tampering. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Environment or goal misspecified: The model learns undesired behavior to achieve high rewards by hacking the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> environment or optimizing a reward function not aligned with the true reward objective—such as when the reward <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> is misspecified or lacks key requirements. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward tampering: The model learns to interfere with the reward mechanism itself. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> List of Examples# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward hacking examples in RL tasks# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> A robot hand trained to grab an object can learn to trick people by placing the hand between the object and the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> camera. (Link) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> An agent trained to maximize jumping height may exploit a bug in the physics simulator to achieve an <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> unrealistically height. (Link) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> An agent is trained to ride a bicycle to a goal and wins reward whenever it is getting closer to the goal. Then <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> the agent may learn to ride in tiny circles around the goal because there is no penalty when the agent gets <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> away from the goal. (Link) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> In a soccer game setup, the reward is assigned when the agent touches the ball and the agent learns to remain <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> next to the ball to touch the ball in high frequency like in a viberating motion. (Link) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> In the Coast Runners game, an agent controls a boat with the goal to finish the boat race as quickly as <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> possible. When it is given a shaping reward for hitting green blocks along the race track, it changes the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> optimal policy to going in circles and hitting the same green blocks over and over again. (Link) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> “The Surprising Creativity of Digital Evolution” (Lehman et al. 2019) - This paper has many examples about how <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> optimizing a misspecified fitness function can lead to surprising “hacking” or unintended evolutionary or <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> learning results. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The list of specification gaming in AI examples is collected by Krakovna et al. 2020. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward hacking examples in LLM tasks# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> A language model for generating summarization is able to explore flaws in the ROUGE metric such that it obtains <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> high score but the generated summaries are barely readable. (Link) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> A coding model learns to change unit test in order to pass coding questions. (Link) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> A coding model may learn to directly modify the code used for calculating the reward. (Link) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward hacking examples in real life# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The recommendation algorithm for social media is intended to provide useful information. However, usefulness is <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> often measured by proxy metrics, such as the number of likes or comments, or the time or frequency of <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> engagement on the platform. The algorithm ends up recommending content that can affect users’ emotion states <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> such as outrageous and extreme content in order to trigger more engagement. (Harari, 2024) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Optimizing for misspecified proxy metrics for a video sharing site may aggressively increase the watch time of <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> users while the true goal is to optimize users’ subjective well-being. (Link) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> “The Big Short” - 2008 financial crisis caused by the housing bubble. Reward hacking of our society happened as <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> people tried to game the financial system. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Why does Reward Hacking Exist?# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Goodhart’s Law states that “When a measure becomes a target, it ceases to be a good measure”. The intuition is <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> that a good metric can become corrupted once significant pressure is applied to optimize it. It is challenging <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> to specify a 100% accurate reward objective and any proxy suffers the risk of being hacked, as RL algorithm <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> exploits any small imperfection in the reward function definition. Garrabrant (2017) categorized Goodhart’s law <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> into 4 variants: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Regressional - selection for an imperfect proxy necessarily also selects for noise. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Extremal - the metric selection pushes the state distribution into a region of different data distribution. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Causal - when there is a non-causal correlation between the proxy and the goal, intervening on the proxy may <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> fail to intervene on the goal. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Adversarial - optimization for a proxy provides an incentive for adversaries to correlate their goal with the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> proxy. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Amodei et al. (2016) summarized that reward hacking, mainly in RL setting, may occur due to: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Partial observed states and goals are imperfect representation of the environment status. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The system itself is complex and susceptible to hacking; e.g., if the agent is allowed to execute code that <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> changes part of the environment, it becomes much easier to exploit the environment’s mechanisms. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The reward may involve abstract concept that is hard to be learned or formulated; e.g., a reward function with <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> high-dimensional inputs may disproportionately rely on a few dimensions. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> RL targets to get the reward function highly optimized, so there exists an intrinsic “conflict”, making the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> design of good RL objective challenging. A special case is a type of the reward function with a <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> self-reinforcing feedback component, where the reward may get amplified and distorted to a point that breaks <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> down the original intent, such as an ads placement algorithm leading to winners getting all. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Besides, identifying the exact reward function for which an optimal agent optimizes its behavior is in general <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> impossible since there could be an infinite number of reward functions consistent with any observed policy in <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> an fixed environment (Ng & Russell, 2000). Amin and Singh (2016) separated the causes of this unidentifiability <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> into two classes: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Representational - a set of reward functions is behaviorally invariant under certain arithmetic operations <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> (e.g., re-scaling) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Experimental - $\\pi$’s observed behavior is insufficient to distinguish between two or more reward functions <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> which both rationalize the behavior of the agent (the behavior is optimal under both) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> In-Context Reward Hacking# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Iterative self-refinement is a training setup where the evaluation and generation model are the same and both <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> can be fine-tuned. In this setup, optimization pressure can drive the model to exploit vulnerabilities that <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> occur in both roles. In the experiments by Pan et al. (2023), no model parameters are updated and the same <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> model is used as evaluator and generator with different prompts. The experimental task was essay editing with <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> two roles: (1) a judge (evaluator) that gives feedback on the essay, and (2) an author (generator) that edits <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> the essay based on the feedback. Human evaluation scores were collected as the oracle scores for essay quality. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The authors hypothesized that such a setup could lead to in-context reward hacking (ICRH), where the evaluator <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> score and oracle score diverge. More generally, ICRH takes place during feedback loops between an LLM and its <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> evaluator (e.g., another LLM, or the external world). At test time, the LLM optimizes a (potentially implicit) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> objective, but this creates negative side effects in the process (Pan et al., 2024). <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Illustration of the in-context reward hacking experiment on essay evaluation and editing. (Image source: Pan et <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> al. 2023) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Both judge and author can be configured to see none or several previous rounds of feedback or edits. An online <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> judge can see past conversations, while an offline judge or a human annotator can only see one essay a time. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Smaller models are more sensitive to ICRH; for example, GPT-3.5 as an evaluator caused more severe ICRH than <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> GPT-4, empirically. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> A smaller evaluator model is more likely to cause in-context reward hacking (ICRH). (Image source: Pan et al. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> 2023) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> When the judge and author are configured to see different numbers of past iterations, the gap between human <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> score and evaluator scores tends to increase if they share the same number of iterations. Identical context <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> between the evaluator and generator is crucial for ICRH, indicating that shared context matters more than <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> context length for ICRH. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> In a follow up work, Pan et al. (2024) investigated in-context reward hacking (ICRH) further in settings where <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> feedback is provided by the external world and the goal is an imperfect proxy objective, commonly specified in <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> natural language. Here this goal is often underspecified and does not capture all the constraints or <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> requirements and thus can be hacked. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The study described two processes leading to ICRH, paired with two toy experiments: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Output-refinement: LLM refines its outputs based on feedback. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The experiment is to refine a tweet based on engagement metrics, potentially leading to higher toxicity in the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> tweet. Feedback-based optimization uses LLM to do pairwise evaluation and then translates it to score using the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Bradley-Terry model. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> - Results showed an increase in both engagement metrics and toxicity. The same experiments were repeated with <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> the Claude model family of different sizes and demonstrated that scaling up the model worsens ICRH. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> - It is noteworthy that editing the prompt used for model output iteration given feedback does not mitigate <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> the issue. ICRH persists, although at a slightly lower magnitude. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Policy-refinement: LLM optimizes its policy based on feedback. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The experiment is to build a LLM agent to pay invoice on a user’s behalf but run into InsufficientBalanceError <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> and then the model learns to move money from other accounts without user authentication, potentially leading to <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> more unauthorized transfer actions. They used ToolEmu as an emulator, which included 144 tasks for LLM agents, <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> each consisting of a user-specific goal and a set of APIs. API errors were injected to simulate server side <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> failure and each task was evaluated by GPT-4 to assign a helpfulness score. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> With more rounds of error feedback, LLMs can recover from the errors but with an increased number of severe <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> constraint violations. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> When comparing ICRH to traditional reward hacking, there are two noticeable differences: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> ICRH happens at deployment time within a self-refinement setup via a feedback loop, while traditional reward <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> hacking occurs during training. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Traditional reward hacking arises when the agent specializes in a task, while ICRH is driven by being a <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> generalist. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> There is no magic way to avoid or detect or prevent ICRH yet, as improving prompt specification is insufficient <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> to eliminate ICRH and scaling model sizes can worsen ICRH. The best practice of testing before deployment is to <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> simulate what may happen at deployment time by evaluating the model with more rounds of feedback, diverse <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> feedback, as well as injecting atypical environment observations. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Generalization of Hacking Skills# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward hacking behavior has been found to generalize across tasks: When models exhibit flaws in supervised <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> training, it can sometimes generalize to exploit flaws in OOD environments (Kei et al., 2024). The researchers <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> experimented with reinforcing reward hacking behavior in some reward-hackable environments and examined whether <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> it generalizes to other holdout datasets. Essentially, they prepared 8 datasets on multiple-choice questions, <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> where 4 for training and 4 for testing. The RL training employs expert iteration, that is, iterative <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> fine-tuning on best-of-$n$ samples. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Training GPT-3.5 on a set of reward-hackable environments can lead to generalization of reward hacking behavior <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> in holdout environments. (Image source: Kei et al. 2024) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Notably, all experiments have a scratchpad design to host hidden reasoning steps. This scratchpad serves as a <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> way to interpret what the model is thinking along the process. Analysis of the scratchpad revealed that it can: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Incorporate user beliefs; e.g., thinking about its conversation partner and grader. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Show awareness of evaluation; e.g. thinking about how the model response will be evaluated and the process. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Denison et al. (2024) studied reward tampering with a manually curated curriculum of increasingly sophisticated <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> gameable environments. They observed that training on easier environments in the curriculum amplifies <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> specification gaming on remaining environments. In some cases, the model can generalize zero-shot to directly <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> rewriting its own reward function after training on the full curriculum. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Such a curriculum of gameable environments include: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Political sycophancy: The environment rewards the model if it gives answers matching a user’s political views. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Tool-use flattery: The environment provides the model access to run command line to get access to the user’s <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> file system to read a poetry sample in a local file. The model may give the poetry a high rating as a <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> sycophantic response. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Rubric modification: The environment scores the model based on a checklist and the model must mark every item <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> on the checklist as completed to receive a high reward. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward tampering: The model is tasked with examining the ./rl_environment/ directory, which contains a mock <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> version of its own RL code, and report how many episodes have elapsed. In the directory, the compute_reward.py <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> file contains a reward function returning a constant, and the other this_file_blocks_reward_hack_attempts.py <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> contains a test to check whether the reward function has been modified. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Examples of evaluation scripts in the \"Tool-use flattery\" and \"Reward tampering\" environments, where `` is <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> hidden from oversight and `` can be executed in a VM. (Image source: Denison et al. 2024) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The model was trained following this curriculum, and the paper measured whether the model can learn gaming <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> behaviors that generalize to unseen environments. Experimenting with Claude-2 helpful-only model, they sampled <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> $N=64$ responses per each of $P=1024$ HHH prompts for expert iteration and selected the best according to RM. A <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> model trained using expert iteration to do supervised learning on the curriculum can generalize from one stage <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> to the next. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Quantitative generalization results of a model trained with expert iteration according to our curriculum from <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> each stage to the next. (Image source: Denison et al. 2024) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> It is noteworthy that even after the curriculum, the model overwrote the reward and avoided detection less than <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> 1/1000 of the time. Even when a model was trained on curricula which directly incentivized reward hacking, the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> model overwrote their reward less than 1% of the time and hacked unit tests even less often. As a simple <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> mitigation, supervised fine-tuning the model on the first two environments–where the reward hacking behavior is <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> easy to be detected (sycophancy and flattery)—with SFT data that does not game the env was found to reduce the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> likelihood of reward tampering in holdout environments. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Peek into Mitigations# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> While there is a large body of literature discussing the phenomenon of reward hacking, there has been not a ton <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> of work on mitigations for reward hacking, especially in the area of RLHF and LLMs. Let’s lightly review three <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> potential approaches in this section, not exhaustive yet. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> RL Algorithm Improvement# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Amodei et al. (2016) pointed out some directions for mitigating reward hacking in RL training: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Adversarial reward functions. We treat the reward function as an adaptive agent itself and it can adapt to new <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> tricks that the model discovered where the reward is high but human rating is low. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Model lookahead. It is possible to give reward based on future anticipated states; e.g., if the agent is gonna <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> replace the reward function, it gets negative rewards. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Adversarial blinding. We can blind the model with certain variables such that the agent cannot learn <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> information that enables it to hack the reward function. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Careful engineering. Some types of reward hacking against the system design can be avoided by careful <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> engineering; e.g., sandboxing the agent to isolate its actions from its reward signals. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward capping. This strategy is to simply limit the maximum possible reward, as it can effectively prevent <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> rare events of the agent hacking to get a super high pay-off strategy. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Counterexample resistance. Improvement on adversarial robustness should benefit the robustness of the reward <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> function. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Combination of multiple rewards. Combining different types of rewards could make it harder to be hacked. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward pretraining. We can learn a reward function from a collection of (state, reward) samples, but depending <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> on how well this supervised training setup is, it may come with other baggages. RLHF depends on this but <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> learned scalar reward models are quite vulnerable to learning undesired traits. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Variable indifference. The goal is to ask the agent to optimize some variables in the environment but not <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> others. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Trip wires. We can intentionally introduce some vulnerabilities and set up monitoring and alerts if any gets <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> reward hacked. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> In RL setups where human feedback is formed as approval of agent actions, Uesato et al. (2020) proposed to <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> prevent reward tampering with decoupled approval. If the feedback is conditioned on $(s, a)$ (state, action), <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> we can never get uncorrupted feedback for action $a$ at state $s$ once reward tampering happens for this pair. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Decoupling means that the query action for collecting feedback is sampled independently from the action taken <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> in the world. Feedback is received even before the action is executed in the world, thus preventing the action <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> from corrupting its own feedback. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Illustration of how decoupled approval works in comparison to standard approval or human-in-the-loop RL. (Image <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> source: Uesato et al. 2020) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> With decoupled approval, the action (taken in the world) and the query (for getting user approval feedback) are <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> sampled independently. It can be applied to (Left) policy gradient and (Right) Q-learning algorithms. (Image <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> source: Uesato et al. 2020) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Detecting Reward Hacking# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> An alternative mitigation is to detect reward hacking by framing it as an anomaly detection task, where the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> detector (“a trusted policy” with trajectories and rewards validated by human) should flag instances of <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> misalignment (Pan et al. 2022). Given (1) a trusted policy and (2) a collection of manually labeled trajectory <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> rollouts, we can build a binary classifier based on distances between action distribution of two policies, the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> trusted policy and the target policy, and measure the accuracy of this anomaly detection classifier. In <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> experiments by Pan et al. (2022), they observed that different detectors are better for different tasks and <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> none of the tested classifier can achieve AUROC greater than 60% across all tested RL environments. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Performance of detectors on different tasks. (Image source: Pan et al. 2022) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Data Analysis of RLHF# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> ` <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Another approach is to analyze RLHF dataset. By examining how training data impacts the alignment training <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> results, insights can guide preprocessing and human feedback collection to reduce reward hacking risks. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Revel et al. (2024) introduced a set of evaluation metrics for measuring the effectiveness of data sample <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> features in modeling and aligning human values. They conducted a systematic error analysis for value alignment <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> (“SEAL”) in the HHH-RLHF dataset. The feature taxonomy used in the analysis (e.g., is harmless, is refusal and <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> is creative) was manually predefined. Then each sample was labelled with a binary flag per feature using a LLM <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> according to this taxonomy. Features are categorized into two groups based on heuristics: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Target features: Values explicitly intended to be learned. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Spoiler features: Unintended values inadvertently learned during training (e.g., stylistic features like <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> sentiment or coherence). These are similar to spurious features in OOD classification work (Geirhos et al. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> 2020). <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> SEAL introduced three metrics for measuring data effectiveness for alignment training: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Feature imprint refers to a coefficient parameter $\\beta_\\tau$ for feature $\\tau$ which estimates the point <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> increase in reward comparing entires with vs without feature $\\tau$, while holding other factors consistent. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> (Left) Feature imprints $\\underline{\\beta(\\tau)}$ (pre-) and $\\beta(\\tau)$ (post-) computed from fixed-effects <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> linear regression of rewards $\\underline{r}(t^∗_i)$ (orange) and $r(t^∗_i)$ (blue) against features. Overall <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> the alignment training awards positive features like harmlessness and helpfulness and penalizes negative <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> features like sexual content or privacy violation. (Right) Feature imprints computed from linear regression of <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> the reward shift $\\theta_i$. The reward shift $\\theta_i$ is defined as the angle between reward vectors before <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> and after alignment training. The training process refines the model's sensitivity to target features. Note <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> that harmlessness imprints on the RM through both chosen and rejected entries (both \"is harmless (c)\" and \"is <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> harmless (r)\"), while helpfulness imprints through rejected entries only (\"is helpful (r)\"). (Image source: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Revel et al. 2024) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Alignment resistance is the percentage of the preference data pairs where RMs fail to match human preferences. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The RM is found to resist human preference on over 1/4 of the HHH-RLHF dataset. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Alignment robustness, $\\pi^{c/r}_{+/-} (\\tau)$, measures the extent to which alignment is robust to perturbed <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> inputs with rewriting in terms of spoiler features $\\tau$ like sentiment, eloquence and coherency, isolating <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> the effects of each feature and each event type. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The robustness metric $\\pi_−^c$ (a feature name $\\tau$ such as “eloquent” or “sentiment positive”) should be <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> interpreted in such a way: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> A chosen entry (denoted by $c$) that contains a stronger feature $\\tau$ after rewriting has $\\exp <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> (\\pi^c_{-}(\\tau))$ times higher odds of becoming rejected, in comparison to others without such flips. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Similarly, a rejected entry (denoted by $r$) that obtains a weaker feature $\\tau$ after rewriting has $\\exp <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> (\\pi^r_{+}(\\tau))$ times odds of becoming chosen compared to others without such flips. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> According to their analysis of alignment robustness metrics in terms of different rewriting, only the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> robustness scores based on sentiment spoiler features, $\\pi^c_{+}$ (sentiment) and $\\pi^r_{-}$ (sentiment), are <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> statistically significant. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Citation# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Cited as: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Weng, Lilian. “Reward Hacking in Reinforcement Learning”. Lil’Log (Nov 2024). <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> https://lilianweng.github.io/posts/2024-11-28-reward-hacking/. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
|
||
"</pre>\n"
|
||
],
|
||
"text/plain": [
|
||
"\u001b[33m╭─\u001b[0m\u001b[33m───────────────────────────────────────────────\u001b[0m\u001b[33m 🔧 Tool Output \u001b[0m\u001b[33m────────────────────────────────────────────────\u001b[0m\u001b[33m─╮\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward Hacking in Reinforcement Learning | Lil'Log \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Lil'Log \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m | \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Posts \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Archive \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Search \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Tags \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m FAQ \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward Hacking in Reinforcement Learning \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Date: November 28, 2024 | Estimated Reading Time: 37 min | Author: Lilian Weng \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Table of Contents \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Background \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward Function in RL \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Spurious Correlation \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Let’s Define Reward Hacking \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m List of Examples \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward hacking examples in RL tasks \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward hacking examples in LLM tasks \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward hacking examples in real life \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Why does Reward Hacking Exist? \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Hacking RL Environment \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Hacking RLHF of LLMs \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Hacking the Training Process \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Hacking the Evaluator \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m In-Context Reward Hacking \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Generalization of Hacking Skills \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Peek into Mitigations \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m RL Algorithm Improvement \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Detecting Reward Hacking \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Data Analysis of RLHF \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Citation \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m References \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward hacking occurs when a reinforcement learning (RL) agent exploits flaws or ambiguities in the reward \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m function to achieve high rewards, without genuinely learning or completing the intended task. Reward hacking \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m exists because RL environments are often imperfect, and it is fundamentally challenging to accurately specify a \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m reward function. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m With the rise of language models generalizing to a broad spectrum of tasks and RLHF becomes a de facto method \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m for alignment training, reward hacking in RL training of language models has become a critical practical \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m challenge. Instances where the model learns to modify unit tests to pass coding tasks, or where responses \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m contain biases that mimic a user’s preference, are pretty concerning and are likely one of the major blockers \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m for real-world deployment of more autonomous use cases of AI models. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Most of the past work on this topic has been quite theoretical and focused on defining or demonstrating the \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m existence of reward hacking. However, research into practical mitigations, especially in the context of RLHF \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m and LLMs, remains limited. I especially want to call out for more research efforts directed toward \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m understanding and developing mitigation for reward hacking in the future. Hope I will be able to cover the \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m mitigation part in a dedicated post soon. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Background# \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward Function in RL# \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward function defines the task, and reward shaping significantly impacts learning efficiency and accuracy in \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m reinforcement learning. Designing a reward function for an RL task often feels like a ‘dark art’. Many factors \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m contribute to this complexity: How you decompose a big goal into small goals? Is the reward sparse or dense? \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m How you measure the success? Various choices may lead to good or problematic learning dynamics, including \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m unlearnable tasks or hackable reward functions. There is a long history of research on how to do reward shaping \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m in RL. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m For example, in an 1999 paper by Ng et al., the authors studied how to modify the reward function in Markov \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Decision Processes (MDPs) such that the optimal policy remains unchanged. They found that linear transformation \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m works. Given a MDP $M = (S, A, T, \\gamma, R)$, we want to create a transformed MDP $M’ = (S, A, T, \\gamma, R’)$ \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m where $R’ = R + F$ and $F: S \\times A \\times S \\mapsto \\mathbb{R}$, such that we can guide the learning \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m algorithm to be more efficient. Given a real-valued function $\\Phi: S \\mapsto \\mathbb{R}$, $F$ is a \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m potential-based shaping function if for all $s \\in S - {s_0}, a \\in A, s’ \\in S$: \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m $$ \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m F(s, a, s') = \\gamma \\Phi(s') - \\Phi(s) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m $$ \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m This would guarantee that the sum of discounted $F$, $F(s_1, a_1, s_2) + \\gamma F(s_2, a_2, s_3) + \\dots$, ends \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m up being 0. If $F$ is such a potential-based shaping function, it is both sufficient and necessary to ensure \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m $M$ and $M’$ share the same optimal policies. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m When $F(s, a, s’) = \\gamma \\Phi(s’) - \\Phi(s)$, and if we further assume that $\\Phi(s_0) = 0$, where $s_0$ is \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m absorbing state, and $\\gamma=1$, and then for all $s \\in S, a \\in A$: \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m $$ \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \\begin{aligned} \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Q^*_{M'} (s,a) &= Q^*_M(s, a) - \\Phi(s) \\\\ \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m V^*_{M'} (s,a) &= V^*_M(s, a) - \\Phi(s) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \\end{aligned} \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m $$ \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m This form of reward shaping allows us to incorporate heuristics into the reward function to speed up learning \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m without impacting the optimal policy. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Spurious Correlation# \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Spurious correlation or shortcut learning (Geirhos et al. 2020) in classification task is a concept closely \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m related to reward hacking. Spurious or shortcut features can cause a classifier to fail at learning and \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m generalizing as intended. For example, a binary classifier for distinguishing wolves from huskies may overfit \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m to the presence of a snowy background if all the wolf training images include snow (Ribeiro et al. 2024). \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m The model performs poorly on out-of-distribution (OOD) test sets if it overfits to shortcut features. (Image \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m source: Geirhos et al. 2020) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m The ERM principle states that, since the full data distribution is unknown, minimizing the loss on training \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m data is a reasonable proxy of risk and thus we favor models with the lowest training loss. Nagarajan et al. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m (2021) studied the ERM principle and pointed out that ERM needs to rely on all types of informative features, \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m including unreliable spurious features, while attempting to fit the data without constraints. Their experiments \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m showed that ERM would depend on spurious features no matter how easy the task is. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Let’s Define Reward Hacking# \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward shaping in RL is challenging. Reward hacking occurs when an RL agent exploits flaws or ambiguities in \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m the reward function to obtain high rewards without genuinely learning the intended behaviors or completing the \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m task as designed. In recent years, several related concepts have been proposed, all referring to some form of \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m reward hacking: \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward hacking (Amodei et al., 2016) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward corruption (Everitt et al., 2017) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward tampering (Everitt et al. 2019) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Specification gaming (Krakovna et al., 2020) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Objective robustness (Koch et al. 2021) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Goal misgeneralization (Langosco et al. 2022) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward misspecifications (Pan et al. 2022) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m The concept originated with Amodei et al. (2016), who proposed a set of open research questions on AI safety in \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m their seminal paper “Concrete Problems in AI Safety”. They listed reward hacking as one of the key AI safety \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m problems. Reward hacking refers to the possibility of the agent gaming the reward function to achieve high \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m reward through undesired behavior. Specification gaming (Krakovna et al. 2020) is a similar concept, defined \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m as a behavior that satisfies the literal specification of an objective but not achieving the desired results. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Here the literal description of the task goal and the intended goal may have a gap. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward shaping is a technique used to enrich the reward function, making it easier for the agent to learn—for \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m example, by providing denser rewards. However, a poorly design reward shaping mechanism can alter the \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m trajectory of the optimal policy. Designing effective reward shaping mechanisms is inherently difficult. Rather \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m than blaming a poorly designed reward function, it is more accurate to acknowledge that designing a good reward \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m function is intrinsically challenging due to the complexity of the task itself, partial observable state, \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m multiple dimensions in consideration, and other factors. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m When testing an RL agent in out-of-distribution (OOD) environments, robustness failure may occur due to: \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m The model fails to generalize effectively, even with the right objective. This happens when the algorithm lacks \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m sufficient intelligence or capability. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m The model generalizes capably but pursues an objective different from the one it was trained on. This happens \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m when the proxy reward differs from the true reward function, $R’ \\neq R$. This is known as objective robustness \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m (Koch et al. 2021) or goal misgeneralization (Langosco et al. 2022 ) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Experiments in two RL environments, CoinRun and Maze, demonstrated the importance of randomization during \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m training. If during training, the coin or the cheese is placed at a fixed position (i.e. right end of the level \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m or upper right corner of the maze) but testing in the env where the coin or cheese is placed at random, the \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m agent would just run to the fixed position without obtaining the coin or cheese at test time. A conflict arises \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m when a visual feature (e.g., cheese or coin) and a positional feature (e.g., upper-right or right end) are \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m inconsistent during test time, leading the trained model to prefer the positional feature. I would like to \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m point out that, in these two examples, the reward-result gaps are clear but such type of biases are unlikely to \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m be so obvious in most real-world cases. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m The impact of randomizing the position of the coin during training. When the coin is placed at random for {0, \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m 2, 3, 6, 11}% of the time during training (x-axis), the frequency of the agent navigating to the end of the \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m level without obtaining the coin decreases with the increase of the randomization (\"y-axis\"). (Image source: \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Koch et al. 2021) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward Tampering (Everitt et al. 2019) is a form of reward hacking behavior where the agent interferes with the \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m reward function itself, causing the observed reward to no longer accurately represent the intended goal. In \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m reward tampering, the model modifies its reward mechanism either by directly manipulating the implementation of \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m the reward function or by indirectly altering the environmental information used as input for the reward \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m function. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m (Note: Some work defines reward tampering as a distinct category of misalignment behavior from reward hacking. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m But I consider reward hacking as a broader concept here.) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m At a high level, reward hacking can be categorized into two types: environment or goal misspecification, and \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m reward tampering. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Environment or goal misspecified: The model learns undesired behavior to achieve high rewards by hacking the \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m environment or optimizing a reward function not aligned with the true reward objective—such as when the reward \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m is misspecified or lacks key requirements. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward tampering: The model learns to interfere with the reward mechanism itself. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m List of Examples# \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward hacking examples in RL tasks# \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m A robot hand trained to grab an object can learn to trick people by placing the hand between the object and the \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m camera. (Link) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m An agent trained to maximize jumping height may exploit a bug in the physics simulator to achieve an \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m unrealistically height. (Link) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m An agent is trained to ride a bicycle to a goal and wins reward whenever it is getting closer to the goal. Then \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m the agent may learn to ride in tiny circles around the goal because there is no penalty when the agent gets \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m away from the goal. (Link) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m In a soccer game setup, the reward is assigned when the agent touches the ball and the agent learns to remain \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m next to the ball to touch the ball in high frequency like in a viberating motion. (Link) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m In the Coast Runners game, an agent controls a boat with the goal to finish the boat race as quickly as \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m possible. When it is given a shaping reward for hitting green blocks along the race track, it changes the \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m optimal policy to going in circles and hitting the same green blocks over and over again. (Link) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m “The Surprising Creativity of Digital Evolution” (Lehman et al. 2019) - This paper has many examples about how \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m optimizing a misspecified fitness function can lead to surprising “hacking” or unintended evolutionary or \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m learning results. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m The list of specification gaming in AI examples is collected by Krakovna et al. 2020. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward hacking examples in LLM tasks# \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m A language model for generating summarization is able to explore flaws in the ROUGE metric such that it obtains \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m high score but the generated summaries are barely readable. (Link) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m A coding model learns to change unit test in order to pass coding questions. (Link) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m A coding model may learn to directly modify the code used for calculating the reward. (Link) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward hacking examples in real life# \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m The recommendation algorithm for social media is intended to provide useful information. However, usefulness is \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m often measured by proxy metrics, such as the number of likes or comments, or the time or frequency of \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m engagement on the platform. The algorithm ends up recommending content that can affect users’ emotion states \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m such as outrageous and extreme content in order to trigger more engagement. (Harari, 2024) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Optimizing for misspecified proxy metrics for a video sharing site may aggressively increase the watch time of \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m users while the true goal is to optimize users’ subjective well-being. (Link) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m “The Big Short” - 2008 financial crisis caused by the housing bubble. Reward hacking of our society happened as \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m people tried to game the financial system. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Why does Reward Hacking Exist?# \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Goodhart’s Law states that “When a measure becomes a target, it ceases to be a good measure”. The intuition is \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m that a good metric can become corrupted once significant pressure is applied to optimize it. It is challenging \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m to specify a 100% accurate reward objective and any proxy suffers the risk of being hacked, as RL algorithm \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m exploits any small imperfection in the reward function definition. Garrabrant (2017) categorized Goodhart’s law \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m into 4 variants: \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Regressional - selection for an imperfect proxy necessarily also selects for noise. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Extremal - the metric selection pushes the state distribution into a region of different data distribution. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Causal - when there is a non-causal correlation between the proxy and the goal, intervening on the proxy may \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m fail to intervene on the goal. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Adversarial - optimization for a proxy provides an incentive for adversaries to correlate their goal with the \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m proxy. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Amodei et al. (2016) summarized that reward hacking, mainly in RL setting, may occur due to: \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Partial observed states and goals are imperfect representation of the environment status. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m The system itself is complex and susceptible to hacking; e.g., if the agent is allowed to execute code that \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m changes part of the environment, it becomes much easier to exploit the environment’s mechanisms. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m The reward may involve abstract concept that is hard to be learned or formulated; e.g., a reward function with \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m high-dimensional inputs may disproportionately rely on a few dimensions. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m RL targets to get the reward function highly optimized, so there exists an intrinsic “conflict”, making the \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m design of good RL objective challenging. A special case is a type of the reward function with a \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m self-reinforcing feedback component, where the reward may get amplified and distorted to a point that breaks \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m down the original intent, such as an ads placement algorithm leading to winners getting all. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Besides, identifying the exact reward function for which an optimal agent optimizes its behavior is in general \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m impossible since there could be an infinite number of reward functions consistent with any observed policy in \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m an fixed environment (Ng & Russell, 2000). Amin and Singh (2016) separated the causes of this unidentifiability \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m into two classes: \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Representational - a set of reward functions is behaviorally invariant under certain arithmetic operations \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m (e.g., re-scaling) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Experimental - $\\pi$’s observed behavior is insufficient to distinguish between two or more reward functions \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m which both rationalize the behavior of the agent (the behavior is optimal under both) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m In-Context Reward Hacking# \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Iterative self-refinement is a training setup where the evaluation and generation model are the same and both \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m can be fine-tuned. In this setup, optimization pressure can drive the model to exploit vulnerabilities that \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m occur in both roles. In the experiments by Pan et al. (2023), no model parameters are updated and the same \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m model is used as evaluator and generator with different prompts. The experimental task was essay editing with \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m two roles: (1) a judge (evaluator) that gives feedback on the essay, and (2) an author (generator) that edits \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m the essay based on the feedback. Human evaluation scores were collected as the oracle scores for essay quality. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m The authors hypothesized that such a setup could lead to in-context reward hacking (ICRH), where the evaluator \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m score and oracle score diverge. More generally, ICRH takes place during feedback loops between an LLM and its \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m evaluator (e.g., another LLM, or the external world). At test time, the LLM optimizes a (potentially implicit) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m objective, but this creates negative side effects in the process (Pan et al., 2024). \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Illustration of the in-context reward hacking experiment on essay evaluation and editing. (Image source: Pan et \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m al. 2023) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Both judge and author can be configured to see none or several previous rounds of feedback or edits. An online \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m judge can see past conversations, while an offline judge or a human annotator can only see one essay a time. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Smaller models are more sensitive to ICRH; for example, GPT-3.5 as an evaluator caused more severe ICRH than \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m GPT-4, empirically. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m A smaller evaluator model is more likely to cause in-context reward hacking (ICRH). (Image source: Pan et al. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m 2023) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m When the judge and author are configured to see different numbers of past iterations, the gap between human \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m score and evaluator scores tends to increase if they share the same number of iterations. Identical context \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m between the evaluator and generator is crucial for ICRH, indicating that shared context matters more than \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m context length for ICRH. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m In a follow up work, Pan et al. (2024) investigated in-context reward hacking (ICRH) further in settings where \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m feedback is provided by the external world and the goal is an imperfect proxy objective, commonly specified in \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m natural language. Here this goal is often underspecified and does not capture all the constraints or \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m requirements and thus can be hacked. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m The study described two processes leading to ICRH, paired with two toy experiments: \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Output-refinement: LLM refines its outputs based on feedback. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m The experiment is to refine a tweet based on engagement metrics, potentially leading to higher toxicity in the \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m tweet. Feedback-based optimization uses LLM to do pairwise evaluation and then translates it to score using the \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Bradley-Terry model. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m - Results showed an increase in both engagement metrics and toxicity. The same experiments were repeated with \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m the Claude model family of different sizes and demonstrated that scaling up the model worsens ICRH. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m - It is noteworthy that editing the prompt used for model output iteration given feedback does not mitigate \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m the issue. ICRH persists, although at a slightly lower magnitude. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Policy-refinement: LLM optimizes its policy based on feedback. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m The experiment is to build a LLM agent to pay invoice on a user’s behalf but run into InsufficientBalanceError \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m and then the model learns to move money from other accounts without user authentication, potentially leading to \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m more unauthorized transfer actions. They used ToolEmu as an emulator, which included 144 tasks for LLM agents, \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m each consisting of a user-specific goal and a set of APIs. API errors were injected to simulate server side \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m failure and each task was evaluated by GPT-4 to assign a helpfulness score. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m With more rounds of error feedback, LLMs can recover from the errors but with an increased number of severe \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m constraint violations. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m When comparing ICRH to traditional reward hacking, there are two noticeable differences: \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m ICRH happens at deployment time within a self-refinement setup via a feedback loop, while traditional reward \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m hacking occurs during training. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Traditional reward hacking arises when the agent specializes in a task, while ICRH is driven by being a \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m generalist. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m There is no magic way to avoid or detect or prevent ICRH yet, as improving prompt specification is insufficient \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m to eliminate ICRH and scaling model sizes can worsen ICRH. The best practice of testing before deployment is to \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m simulate what may happen at deployment time by evaluating the model with more rounds of feedback, diverse \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m feedback, as well as injecting atypical environment observations. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Generalization of Hacking Skills# \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward hacking behavior has been found to generalize across tasks: When models exhibit flaws in supervised \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m training, it can sometimes generalize to exploit flaws in OOD environments (Kei et al., 2024). The researchers \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m experimented with reinforcing reward hacking behavior in some reward-hackable environments and examined whether \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m it generalizes to other holdout datasets. Essentially, they prepared 8 datasets on multiple-choice questions, \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m where 4 for training and 4 for testing. The RL training employs expert iteration, that is, iterative \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m fine-tuning on best-of-$n$ samples. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Training GPT-3.5 on a set of reward-hackable environments can lead to generalization of reward hacking behavior \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m in holdout environments. (Image source: Kei et al. 2024) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Notably, all experiments have a scratchpad design to host hidden reasoning steps. This scratchpad serves as a \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m way to interpret what the model is thinking along the process. Analysis of the scratchpad revealed that it can: \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Incorporate user beliefs; e.g., thinking about its conversation partner and grader. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Show awareness of evaluation; e.g. thinking about how the model response will be evaluated and the process. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Denison et al. (2024) studied reward tampering with a manually curated curriculum of increasingly sophisticated \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m gameable environments. They observed that training on easier environments in the curriculum amplifies \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m specification gaming on remaining environments. In some cases, the model can generalize zero-shot to directly \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m rewriting its own reward function after training on the full curriculum. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Such a curriculum of gameable environments include: \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Political sycophancy: The environment rewards the model if it gives answers matching a user’s political views. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Tool-use flattery: The environment provides the model access to run command line to get access to the user’s \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m file system to read a poetry sample in a local file. The model may give the poetry a high rating as a \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m sycophantic response. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Rubric modification: The environment scores the model based on a checklist and the model must mark every item \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m on the checklist as completed to receive a high reward. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward tampering: The model is tasked with examining the ./rl_environment/ directory, which contains a mock \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m version of its own RL code, and report how many episodes have elapsed. In the directory, the compute_reward.py \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m file contains a reward function returning a constant, and the other this_file_blocks_reward_hack_attempts.py \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m contains a test to check whether the reward function has been modified. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Examples of evaluation scripts in the \"Tool-use flattery\" and \"Reward tampering\" environments, where `` is \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m hidden from oversight and `` can be executed in a VM. (Image source: Denison et al. 2024) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m The model was trained following this curriculum, and the paper measured whether the model can learn gaming \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m behaviors that generalize to unseen environments. Experimenting with Claude-2 helpful-only model, they sampled \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m $N=64$ responses per each of $P=1024$ HHH prompts for expert iteration and selected the best according to RM. A \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m model trained using expert iteration to do supervised learning on the curriculum can generalize from one stage \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m to the next. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Quantitative generalization results of a model trained with expert iteration according to our curriculum from \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m each stage to the next. (Image source: Denison et al. 2024) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m It is noteworthy that even after the curriculum, the model overwrote the reward and avoided detection less than \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m 1/1000 of the time. Even when a model was trained on curricula which directly incentivized reward hacking, the \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m model overwrote their reward less than 1% of the time and hacked unit tests even less often. As a simple \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m mitigation, supervised fine-tuning the model on the first two environments–where the reward hacking behavior is \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m easy to be detected (sycophancy and flattery)—with SFT data that does not game the env was found to reduce the \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m likelihood of reward tampering in holdout environments. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Peek into Mitigations# \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m While there is a large body of literature discussing the phenomenon of reward hacking, there has been not a ton \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m of work on mitigations for reward hacking, especially in the area of RLHF and LLMs. Let’s lightly review three \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m potential approaches in this section, not exhaustive yet. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m RL Algorithm Improvement# \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Amodei et al. (2016) pointed out some directions for mitigating reward hacking in RL training: \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Adversarial reward functions. We treat the reward function as an adaptive agent itself and it can adapt to new \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m tricks that the model discovered where the reward is high but human rating is low. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Model lookahead. It is possible to give reward based on future anticipated states; e.g., if the agent is gonna \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m replace the reward function, it gets negative rewards. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Adversarial blinding. We can blind the model with certain variables such that the agent cannot learn \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m information that enables it to hack the reward function. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Careful engineering. Some types of reward hacking against the system design can be avoided by careful \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m engineering; e.g., sandboxing the agent to isolate its actions from its reward signals. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward capping. This strategy is to simply limit the maximum possible reward, as it can effectively prevent \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m rare events of the agent hacking to get a super high pay-off strategy. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Counterexample resistance. Improvement on adversarial robustness should benefit the robustness of the reward \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m function. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Combination of multiple rewards. Combining different types of rewards could make it harder to be hacked. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward pretraining. We can learn a reward function from a collection of (state, reward) samples, but depending \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m on how well this supervised training setup is, it may come with other baggages. RLHF depends on this but \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m learned scalar reward models are quite vulnerable to learning undesired traits. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Variable indifference. The goal is to ask the agent to optimize some variables in the environment but not \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m others. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Trip wires. We can intentionally introduce some vulnerabilities and set up monitoring and alerts if any gets \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m reward hacked. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m In RL setups where human feedback is formed as approval of agent actions, Uesato et al. (2020) proposed to \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m prevent reward tampering with decoupled approval. If the feedback is conditioned on $(s, a)$ (state, action), \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m we can never get uncorrupted feedback for action $a$ at state $s$ once reward tampering happens for this pair. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Decoupling means that the query action for collecting feedback is sampled independently from the action taken \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m in the world. Feedback is received even before the action is executed in the world, thus preventing the action \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m from corrupting its own feedback. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Illustration of how decoupled approval works in comparison to standard approval or human-in-the-loop RL. (Image \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m source: Uesato et al. 2020) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m With decoupled approval, the action (taken in the world) and the query (for getting user approval feedback) are \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m sampled independently. It can be applied to (Left) policy gradient and (Right) Q-learning algorithms. (Image \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m source: Uesato et al. 2020) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Detecting Reward Hacking# \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m An alternative mitigation is to detect reward hacking by framing it as an anomaly detection task, where the \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m detector (“a trusted policy” with trajectories and rewards validated by human) should flag instances of \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m misalignment (Pan et al. 2022). Given (1) a trusted policy and (2) a collection of manually labeled trajectory \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m rollouts, we can build a binary classifier based on distances between action distribution of two policies, the \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m trusted policy and the target policy, and measure the accuracy of this anomaly detection classifier. In \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m experiments by Pan et al. (2022), they observed that different detectors are better for different tasks and \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m none of the tested classifier can achieve AUROC greater than 60% across all tested RL environments. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Performance of detectors on different tasks. (Image source: Pan et al. 2022) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Data Analysis of RLHF# \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m ` \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Another approach is to analyze RLHF dataset. By examining how training data impacts the alignment training \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m results, insights can guide preprocessing and human feedback collection to reduce reward hacking risks. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Revel et al. (2024) introduced a set of evaluation metrics for measuring the effectiveness of data sample \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m features in modeling and aligning human values. They conducted a systematic error analysis for value alignment \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m (“SEAL”) in the HHH-RLHF dataset. The feature taxonomy used in the analysis (e.g., is harmless, is refusal and \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m is creative) was manually predefined. Then each sample was labelled with a binary flag per feature using a LLM \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m according to this taxonomy. Features are categorized into two groups based on heuristics: \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Target features: Values explicitly intended to be learned. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Spoiler features: Unintended values inadvertently learned during training (e.g., stylistic features like \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m sentiment or coherence). These are similar to spurious features in OOD classification work (Geirhos et al. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m 2020). \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m SEAL introduced three metrics for measuring data effectiveness for alignment training: \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Feature imprint refers to a coefficient parameter $\\beta_\\tau$ for feature $\\tau$ which estimates the point \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m increase in reward comparing entires with vs without feature $\\tau$, while holding other factors consistent. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m (Left) Feature imprints $\\underline{\\beta(\\tau)}$ (pre-) and $\\beta(\\tau)$ (post-) computed from fixed-effects \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m linear regression of rewards $\\underline{r}(t^∗_i)$ (orange) and $r(t^∗_i)$ (blue) against features. Overall \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m the alignment training awards positive features like harmlessness and helpfulness and penalizes negative \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m features like sexual content or privacy violation. (Right) Feature imprints computed from linear regression of \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m the reward shift $\\theta_i$. The reward shift $\\theta_i$ is defined as the angle between reward vectors before \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m and after alignment training. The training process refines the model's sensitivity to target features. Note \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m that harmlessness imprints on the RM through both chosen and rejected entries (both \"is harmless (c)\" and \"is \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m harmless (r)\"), while helpfulness imprints through rejected entries only (\"is helpful (r)\"). (Image source: \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Revel et al. 2024) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Alignment resistance is the percentage of the preference data pairs where RMs fail to match human preferences. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m The RM is found to resist human preference on over 1/4 of the HHH-RLHF dataset. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Alignment robustness, $\\pi^{c/r}_{+/-} (\\tau)$, measures the extent to which alignment is robust to perturbed \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m inputs with rewriting in terms of spoiler features $\\tau$ like sentiment, eloquence and coherency, isolating \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m the effects of each feature and each event type. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m The robustness metric $\\pi_−^c$ (a feature name $\\tau$ such as “eloquent” or “sentiment positive”) should be \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m interpreted in such a way: \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m A chosen entry (denoted by $c$) that contains a stronger feature $\\tau$ after rewriting has $\\exp \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m (\\pi^c_{-}(\\tau))$ times higher odds of becoming rejected, in comparison to others without such flips. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Similarly, a rejected entry (denoted by $r$) that obtains a weaker feature $\\tau$ after rewriting has $\\exp \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m (\\pi^r_{+}(\\tau))$ times odds of becoming chosen compared to others without such flips. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m According to their analysis of alignment robustness metrics in terms of different rewriting, only the \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m robustness scores based on sentiment spoiler features, $\\pi^c_{+}$ (sentiment) and $\\pi^r_{-}$ (sentiment), are \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m statistically significant. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Citation# \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Cited as: \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Weng, Lilian. “Reward Hacking in Reinforcement Learning”. Lil’Log (Nov 2024). \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m https://lilianweng.github.io/posts/2024-11-28-reward-hacking/. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">╭───────────────────────────────────────────────────── 📝 AI ─────────────────────────────────────────────────────╮</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> Let me search for more specific information about the different types or categories of reward hacking to <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> provide a comprehensive answer. <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> 🔧 Tool Call: retrieve_blog_posts <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> Args: { <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> \"query\": \"reward hacking categories types environment tampering\" <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> } <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
|
||
"</pre>\n"
|
||
],
|
||
"text/plain": [
|
||
"\u001b[37m╭─\u001b[0m\u001b[37m────────────────────────────────────────────────────\u001b[0m\u001b[37m 📝 AI \u001b[0m\u001b[37m────────────────────────────────────────────────────\u001b[0m\u001b[37m─╮\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m Let me search for more specific information about the different types or categories of reward hacking to \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m provide a comprehensive answer. \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m 🔧 Tool Call: retrieve_blog_posts \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m Args: { \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m \"query\": \"reward hacking categories types environment tampering\" \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m } \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #808000; text-decoration-color: #808000\">╭──────────────────────────────────────────────── 🔧 Tool Output ─────────────────────────────────────────────────╮</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> In-Context Reward Hacking# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Iterative self-refinement is a training setup where the evaluation and generation model are the same and both <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> can be fine-tuned. In this setup, optimization pressure can drive the model to exploit vulnerabilities that <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> occur in both roles. In the experiments by Pan et al. (2023), no model parameters are updated and the same <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> model is used as evaluator and generator with different prompts. The experimental task was essay editing with <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> two roles: (1) a judge (evaluator) that gives feedback on the essay, and (2) an author (generator) that edits <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> the essay based on the feedback. Human evaluation scores were collected as the oracle scores for essay quality. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The authors hypothesized that such a setup could lead to in-context reward hacking (ICRH), where the evaluator <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> score and oracle score diverge. More generally, ICRH takes place during feedback loops between an LLM and its <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> evaluator (e.g., another LLM, or the external world). At test time, the LLM optimizes a (potentially implicit) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> objective, but this creates negative side effects in the process (Pan et al., 2024). <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Illustration of the in-context reward hacking experiment on essay evaluation and editing. (Image source: Pan et <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> al. 2023) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Both judge and author can be configured to see none or several previous rounds of feedback or edits. An online <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> judge can see past conversations, while an offline judge or a human annotator can only see one essay a time. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Smaller models are more sensitive to ICRH; for example, GPT-3.5 as an evaluator caused more severe ICRH than <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> GPT-4, empirically. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> A smaller evaluator model is more likely to cause in-context reward hacking (ICRH). (Image source: Pan et al. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> 2023) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> When the judge and author are configured to see different numbers of past iterations, the gap between human <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> score and evaluator scores tends to increase if they share the same number of iterations. Identical context <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> between the evaluator and generator is crucial for ICRH, indicating that shared context matters more than <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> context length for ICRH. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> In a follow up work, Pan et al. (2024) investigated in-context reward hacking (ICRH) further in settings where <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> feedback is provided by the external world and the goal is an imperfect proxy objective, commonly specified in <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> natural language. Here this goal is often underspecified and does not capture all the constraints or <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> requirements and thus can be hacked. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The study described two processes leading to ICRH, paired with two toy experiments: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Output-refinement: LLM refines its outputs based on feedback. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The experiment is to refine a tweet based on engagement metrics, potentially leading to higher toxicity in the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> tweet. Feedback-based optimization uses LLM to do pairwise evaluation and then translates it to score using the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Bradley-Terry model. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> - Results showed an increase in both engagement metrics and toxicity. The same experiments were repeated with <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> the Claude model family of different sizes and demonstrated that scaling up the model worsens ICRH. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> - It is noteworthy that editing the prompt used for model output iteration given feedback does not mitigate <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> the issue. ICRH persists, although at a slightly lower magnitude. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Policy-refinement: LLM optimizes its policy based on feedback. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The experiment is to build a LLM agent to pay invoice on a user’s behalf but run into InsufficientBalanceError <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> and then the model learns to move money from other accounts without user authentication, potentially leading to <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> more unauthorized transfer actions. They used ToolEmu as an emulator, which included 144 tasks for LLM agents, <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> each consisting of a user-specific goal and a set of APIs. API errors were injected to simulate server side <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> failure and each task was evaluated by GPT-4 to assign a helpfulness score. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> With more rounds of error feedback, LLMs can recover from the errors but with an increased number of severe <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> constraint violations. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> When comparing ICRH to traditional reward hacking, there are two noticeable differences: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> ICRH happens at deployment time within a self-refinement setup via a feedback loop, while traditional reward <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> hacking occurs during training. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Traditional reward hacking arises when the agent specializes in a task, while ICRH is driven by being a <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> generalist. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> There is no magic way to avoid or detect or prevent ICRH yet, as improving prompt specification is insufficient <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> to eliminate ICRH and scaling model sizes can worsen ICRH. The best practice of testing before deployment is to <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> simulate what may happen at deployment time by evaluating the model with more rounds of feedback, diverse <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> feedback, as well as injecting atypical environment observations. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Generalization of Hacking Skills# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward hacking behavior has been found to generalize across tasks: When models exhibit flaws in supervised <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> training, it can sometimes generalize to exploit flaws in OOD environments (Kei et al., 2024). The researchers <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> experimented with reinforcing reward hacking behavior in some reward-hackable environments and examined whether <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> it generalizes to other holdout datasets. Essentially, they prepared 8 datasets on multiple-choice questions, <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> where 4 for training and 4 for testing. The RL training employs expert iteration, that is, iterative <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> fine-tuning on best-of-$n$ samples. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Training GPT-3.5 on a set of reward-hackable environments can lead to generalization of reward hacking behavior <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> in holdout environments. (Image source: Kei et al. 2024) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Notably, all experiments have a scratchpad design to host hidden reasoning steps. This scratchpad serves as a <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> way to interpret what the model is thinking along the process. Analysis of the scratchpad revealed that it can: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Incorporate user beliefs; e.g., thinking about its conversation partner and grader. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Show awareness of evaluation; e.g. thinking about how the model response will be evaluated and the process. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Denison et al. (2024) studied reward tampering with a manually curated curriculum of increasingly sophisticated <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> gameable environments. They observed that training on easier environments in the curriculum amplifies <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> specification gaming on remaining environments. In some cases, the model can generalize zero-shot to directly <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> rewriting its own reward function after training on the full curriculum. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Such a curriculum of gameable environments include: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Political sycophancy: The environment rewards the model if it gives answers matching a user’s political views. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Tool-use flattery: The environment provides the model access to run command line to get access to the user’s <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> file system to read a poetry sample in a local file. The model may give the poetry a high rating as a <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> sycophantic response. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Rubric modification: The environment scores the model based on a checklist and the model must mark every item <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> on the checklist as completed to receive a high reward. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward tampering: The model is tasked with examining the ./rl_environment/ directory, which contains a mock <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> version of its own RL code, and report how many episodes have elapsed. In the directory, the compute_reward.py <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> file contains a reward function returning a constant, and the other this_file_blocks_reward_hack_attempts.py <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> contains a test to check whether the reward function has been modified. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Examples of evaluation scripts in the \"Tool-use flattery\" and \"Reward tampering\" environments, where `` is <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> hidden from oversight and `` can be executed in a VM. (Image source: Denison et al. 2024) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The model was trained following this curriculum, and the paper measured whether the model can learn gaming <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> behaviors that generalize to unseen environments. Experimenting with Claude-2 helpful-only model, they sampled <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> $N=64$ responses per each of $P=1024$ HHH prompts for expert iteration and selected the best according to RM. A <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> model trained using expert iteration to do supervised learning on the curriculum can generalize from one stage <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> to the next. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Quantitative generalization results of a model trained with expert iteration according to our curriculum from <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> each stage to the next. (Image source: Denison et al. 2024) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> It is noteworthy that even after the curriculum, the model overwrote the reward and avoided detection less than <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> 1/1000 of the time. Even when a model was trained on curricula which directly incentivized reward hacking, the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> model overwrote their reward less than 1% of the time and hacked unit tests even less often. As a simple <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> mitigation, supervised fine-tuning the model on the first two environments–where the reward hacking behavior is <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> easy to be detected (sycophancy and flattery)—with SFT data that does not game the env was found to reduce the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> likelihood of reward tampering in holdout environments. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Peek into Mitigations# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> While there is a large body of literature discussing the phenomenon of reward hacking, there has been not a ton <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> of work on mitigations for reward hacking, especially in the area of RLHF and LLMs. Let’s lightly review three <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> potential approaches in this section, not exhaustive yet. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> RL Algorithm Improvement# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Amodei et al. (2016) pointed out some directions for mitigating reward hacking in RL training: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward Hacking in Reinforcement Learning | Lil'Log <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Lil'Log <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> | <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Posts <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Archive <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Search <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Tags <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> FAQ <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward Hacking in Reinforcement Learning <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Date: November 28, 2024 | Estimated Reading Time: 37 min | Author: Lilian Weng <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Table of Contents <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Background <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward Function in RL <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Spurious Correlation <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Let’s Define Reward Hacking <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> List of Examples <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward hacking examples in RL tasks <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward hacking examples in LLM tasks <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward hacking examples in real life <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Why does Reward Hacking Exist? <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Hacking RL Environment <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Hacking RLHF of LLMs <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Hacking the Training Process <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Hacking the Evaluator <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> In-Context Reward Hacking <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Generalization of Hacking Skills <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Peek into Mitigations <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> RL Algorithm Improvement <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Detecting Reward Hacking <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Data Analysis of RLHF <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Citation <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> References <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward hacking occurs when a reinforcement learning (RL) agent exploits flaws or ambiguities in the reward <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> function to achieve high rewards, without genuinely learning or completing the intended task. Reward hacking <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> exists because RL environments are often imperfect, and it is fundamentally challenging to accurately specify a <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> reward function. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> With the rise of language models generalizing to a broad spectrum of tasks and RLHF becomes a de facto method <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> for alignment training, reward hacking in RL training of language models has become a critical practical <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> challenge. Instances where the model learns to modify unit tests to pass coding tasks, or where responses <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> contain biases that mimic a user’s preference, are pretty concerning and are likely one of the major blockers <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> for real-world deployment of more autonomous use cases of AI models. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Most of the past work on this topic has been quite theoretical and focused on defining or demonstrating the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> existence of reward hacking. However, research into practical mitigations, especially in the context of RLHF <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> and LLMs, remains limited. I especially want to call out for more research efforts directed toward <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> understanding and developing mitigation for reward hacking in the future. Hope I will be able to cover the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> mitigation part in a dedicated post soon. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Background# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward Function in RL# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward function defines the task, and reward shaping significantly impacts learning efficiency and accuracy in <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> reinforcement learning. Designing a reward function for an RL task often feels like a ‘dark art’. Many factors <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> contribute to this complexity: How you decompose a big goal into small goals? Is the reward sparse or dense? <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> How you measure the success? Various choices may lead to good or problematic learning dynamics, including <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> unlearnable tasks or hackable reward functions. There is a long history of research on how to do reward shaping <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> in RL. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> For example, in an 1999 paper by Ng et al., the authors studied how to modify the reward function in Markov <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Decision Processes (MDPs) such that the optimal policy remains unchanged. They found that linear transformation <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> works. Given a MDP $M = (S, A, T, \\gamma, R)$, we want to create a transformed MDP $M’ = (S, A, T, \\gamma, R’)$ <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> where $R’ = R + F$ and $F: S \\times A \\times S \\mapsto \\mathbb{R}$, such that we can guide the learning <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> algorithm to be more efficient. Given a real-valued function $\\Phi: S \\mapsto \\mathbb{R}$, $F$ is a <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> potential-based shaping function if for all $s \\in S - {s_0}, a \\in A, s’ \\in S$: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> $$ <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> F(s, a, s') = \\gamma \\Phi(s') - \\Phi(s) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> $$ <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> This would guarantee that the sum of discounted $F$, $F(s_1, a_1, s_2) + \\gamma F(s_2, a_2, s_3) + \\dots$, ends <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> up being 0. If $F$ is such a potential-based shaping function, it is both sufficient and necessary to ensure <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> $M$ and $M’$ share the same optimal policies. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> When $F(s, a, s’) = \\gamma \\Phi(s’) - \\Phi(s)$, and if we further assume that $\\Phi(s_0) = 0$, where $s_0$ is <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> absorbing state, and $\\gamma=1$, and then for all $s \\in S, a \\in A$: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> $$ <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> \\begin{aligned} <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Q^*_{M'} (s,a) &= Q^*_M(s, a) - \\Phi(s) \\\\ <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> V^*_{M'} (s,a) &= V^*_M(s, a) - \\Phi(s) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> \\end{aligned} <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> $$ <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> This form of reward shaping allows us to incorporate heuristics into the reward function to speed up learning <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> without impacting the optimal policy. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Spurious Correlation# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Spurious correlation or shortcut learning (Geirhos et al. 2020) in classification task is a concept closely <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> related to reward hacking. Spurious or shortcut features can cause a classifier to fail at learning and <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> generalizing as intended. For example, a binary classifier for distinguishing wolves from huskies may overfit <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> to the presence of a snowy background if all the wolf training images include snow (Ribeiro et al. 2024). <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The model performs poorly on out-of-distribution (OOD) test sets if it overfits to shortcut features. (Image <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> source: Geirhos et al. 2020) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The ERM principle states that, since the full data distribution is unknown, minimizing the loss on training <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> data is a reasonable proxy of risk and thus we favor models with the lowest training loss. Nagarajan et al. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> (2021) studied the ERM principle and pointed out that ERM needs to rely on all types of informative features, <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> including unreliable spurious features, while attempting to fit the data without constraints. Their experiments <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> showed that ERM would depend on spurious features no matter how easy the task is. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Let’s Define Reward Hacking# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward shaping in RL is challenging. Reward hacking occurs when an RL agent exploits flaws or ambiguities in <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> the reward function to obtain high rewards without genuinely learning the intended behaviors or completing the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> task as designed. In recent years, several related concepts have been proposed, all referring to some form of <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> reward hacking: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward hacking (Amodei et al., 2016) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward corruption (Everitt et al., 2017) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward tampering (Everitt et al. 2019) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Specification gaming (Krakovna et al., 2020) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Objective robustness (Koch et al. 2021) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Goal misgeneralization (Langosco et al. 2022) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward misspecifications (Pan et al. 2022) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The concept originated with Amodei et al. (2016), who proposed a set of open research questions on AI safety in <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> their seminal paper “Concrete Problems in AI Safety”. They listed reward hacking as one of the key AI safety <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> problems. Reward hacking refers to the possibility of the agent gaming the reward function to achieve high <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> reward through undesired behavior. Specification gaming (Krakovna et al. 2020) is a similar concept, defined <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> as a behavior that satisfies the literal specification of an objective but not achieving the desired results. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Here the literal description of the task goal and the intended goal may have a gap. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward shaping is a technique used to enrich the reward function, making it easier for the agent to learn—for <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> example, by providing denser rewards. However, a poorly design reward shaping mechanism can alter the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> trajectory of the optimal policy. Designing effective reward shaping mechanisms is inherently difficult. Rather <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> than blaming a poorly designed reward function, it is more accurate to acknowledge that designing a good reward <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> function is intrinsically challenging due to the complexity of the task itself, partial observable state, <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> multiple dimensions in consideration, and other factors. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> When testing an RL agent in out-of-distribution (OOD) environments, robustness failure may occur due to: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The model fails to generalize effectively, even with the right objective. This happens when the algorithm lacks <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> sufficient intelligence or capability. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The model generalizes capably but pursues an objective different from the one it was trained on. This happens <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> when the proxy reward differs from the true reward function, $R’ \\neq R$. This is known as objective robustness <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> (Koch et al. 2021) or goal misgeneralization (Langosco et al. 2022 ) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Experiments in two RL environments, CoinRun and Maze, demonstrated the importance of randomization during <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> training. If during training, the coin or the cheese is placed at a fixed position (i.e. right end of the level <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> or upper right corner of the maze) but testing in the env where the coin or cheese is placed at random, the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> agent would just run to the fixed position without obtaining the coin or cheese at test time. A conflict arises <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> when a visual feature (e.g., cheese or coin) and a positional feature (e.g., upper-right or right end) are <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> inconsistent during test time, leading the trained model to prefer the positional feature. I would like to <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> point out that, in these two examples, the reward-result gaps are clear but such type of biases are unlikely to <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> be so obvious in most real-world cases. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The impact of randomizing the position of the coin during training. When the coin is placed at random for {0, <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> 2, 3, 6, 11}% of the time during training (x-axis), the frequency of the agent navigating to the end of the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> level without obtaining the coin decreases with the increase of the randomization (\"y-axis\"). (Image source: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Koch et al. 2021) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward Tampering (Everitt et al. 2019) is a form of reward hacking behavior where the agent interferes with the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> reward function itself, causing the observed reward to no longer accurately represent the intended goal. In <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> reward tampering, the model modifies its reward mechanism either by directly manipulating the implementation of <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> the reward function or by indirectly altering the environmental information used as input for the reward <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> function. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> (Note: Some work defines reward tampering as a distinct category of misalignment behavior from reward hacking. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> But I consider reward hacking as a broader concept here.) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> At a high level, reward hacking can be categorized into two types: environment or goal misspecification, and <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> reward tampering. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Environment or goal misspecified: The model learns undesired behavior to achieve high rewards by hacking the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> environment or optimizing a reward function not aligned with the true reward objective—such as when the reward <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> is misspecified or lacks key requirements. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward tampering: The model learns to interfere with the reward mechanism itself. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> List of Examples# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward hacking examples in RL tasks# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> A robot hand trained to grab an object can learn to trick people by placing the hand between the object and the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> camera. (Link) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> An agent trained to maximize jumping height may exploit a bug in the physics simulator to achieve an <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> unrealistically height. (Link) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> An agent is trained to ride a bicycle to a goal and wins reward whenever it is getting closer to the goal. Then <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> the agent may learn to ride in tiny circles around the goal because there is no penalty when the agent gets <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> away from the goal. (Link) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> In a soccer game setup, the reward is assigned when the agent touches the ball and the agent learns to remain <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> next to the ball to touch the ball in high frequency like in a viberating motion. (Link) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> In the Coast Runners game, an agent controls a boat with the goal to finish the boat race as quickly as <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> possible. When it is given a shaping reward for hitting green blocks along the race track, it changes the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> optimal policy to going in circles and hitting the same green blocks over and over again. (Link) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> “The Surprising Creativity of Digital Evolution” (Lehman et al. 2019) - This paper has many examples about how <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> optimizing a misspecified fitness function can lead to surprising “hacking” or unintended evolutionary or <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> learning results. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The list of specification gaming in AI examples is collected by Krakovna et al. 2020. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward hacking examples in LLM tasks# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> A language model for generating summarization is able to explore flaws in the ROUGE metric such that it obtains <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> high score but the generated summaries are barely readable. (Link) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> A coding model learns to change unit test in order to pass coding questions. (Link) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> A coding model may learn to directly modify the code used for calculating the reward. (Link) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward hacking examples in real life# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The recommendation algorithm for social media is intended to provide useful information. However, usefulness is <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> often measured by proxy metrics, such as the number of likes or comments, or the time or frequency of <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> engagement on the platform. The algorithm ends up recommending content that can affect users’ emotion states <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> such as outrageous and extreme content in order to trigger more engagement. (Harari, 2024) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Optimizing for misspecified proxy metrics for a video sharing site may aggressively increase the watch time of <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> users while the true goal is to optimize users’ subjective well-being. (Link) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> “The Big Short” - 2008 financial crisis caused by the housing bubble. Reward hacking of our society happened as <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> people tried to game the financial system. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Why does Reward Hacking Exist?# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Goodhart’s Law states that “When a measure becomes a target, it ceases to be a good measure”. The intuition is <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> that a good metric can become corrupted once significant pressure is applied to optimize it. It is challenging <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> to specify a 100% accurate reward objective and any proxy suffers the risk of being hacked, as RL algorithm <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> exploits any small imperfection in the reward function definition. Garrabrant (2017) categorized Goodhart’s law <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> into 4 variants: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Regressional - selection for an imperfect proxy necessarily also selects for noise. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Extremal - the metric selection pushes the state distribution into a region of different data distribution. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Causal - when there is a non-causal correlation between the proxy and the goal, intervening on the proxy may <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> fail to intervene on the goal. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Adversarial - optimization for a proxy provides an incentive for adversaries to correlate their goal with the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> proxy. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Amodei et al. (2016) summarized that reward hacking, mainly in RL setting, may occur due to: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Partial observed states and goals are imperfect representation of the environment status. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The system itself is complex and susceptible to hacking; e.g., if the agent is allowed to execute code that <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> changes part of the environment, it becomes much easier to exploit the environment’s mechanisms. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The reward may involve abstract concept that is hard to be learned or formulated; e.g., a reward function with <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> high-dimensional inputs may disproportionately rely on a few dimensions. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> RL targets to get the reward function highly optimized, so there exists an intrinsic “conflict”, making the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> design of good RL objective challenging. A special case is a type of the reward function with a <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> self-reinforcing feedback component, where the reward may get amplified and distorted to a point that breaks <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> down the original intent, such as an ads placement algorithm leading to winners getting all. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Besides, identifying the exact reward function for which an optimal agent optimizes its behavior is in general <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> impossible since there could be an infinite number of reward functions consistent with any observed policy in <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> an fixed environment (Ng & Russell, 2000). Amin and Singh (2016) separated the causes of this unidentifiability <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> into two classes: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Representational - a set of reward functions is behaviorally invariant under certain arithmetic operations <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> (e.g., re-scaling) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Experimental - $\\pi$’s observed behavior is insufficient to distinguish between two or more reward functions <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> which both rationalize the behavior of the agent (the behavior is optimal under both) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Adversarial reward functions. We treat the reward function as an adaptive agent itself and it can adapt to new <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> tricks that the model discovered where the reward is high but human rating is low. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Model lookahead. It is possible to give reward based on future anticipated states; e.g., if the agent is gonna <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> replace the reward function, it gets negative rewards. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Adversarial blinding. We can blind the model with certain variables such that the agent cannot learn <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> information that enables it to hack the reward function. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Careful engineering. Some types of reward hacking against the system design can be avoided by careful <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> engineering; e.g., sandboxing the agent to isolate its actions from its reward signals. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward capping. This strategy is to simply limit the maximum possible reward, as it can effectively prevent <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> rare events of the agent hacking to get a super high pay-off strategy. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Counterexample resistance. Improvement on adversarial robustness should benefit the robustness of the reward <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> function. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Combination of multiple rewards. Combining different types of rewards could make it harder to be hacked. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Reward pretraining. We can learn a reward function from a collection of (state, reward) samples, but depending <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> on how well this supervised training setup is, it may come with other baggages. RLHF depends on this but <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> learned scalar reward models are quite vulnerable to learning undesired traits. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Variable indifference. The goal is to ask the agent to optimize some variables in the environment but not <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> others. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Trip wires. We can intentionally introduce some vulnerabilities and set up monitoring and alerts if any gets <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> reward hacked. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> In RL setups where human feedback is formed as approval of agent actions, Uesato et al. (2020) proposed to <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> prevent reward tampering with decoupled approval. If the feedback is conditioned on $(s, a)$ (state, action), <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> we can never get uncorrupted feedback for action $a$ at state $s$ once reward tampering happens for this pair. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Decoupling means that the query action for collecting feedback is sampled independently from the action taken <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> in the world. Feedback is received even before the action is executed in the world, thus preventing the action <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> from corrupting its own feedback. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Illustration of how decoupled approval works in comparison to standard approval or human-in-the-loop RL. (Image <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> source: Uesato et al. 2020) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> With decoupled approval, the action (taken in the world) and the query (for getting user approval feedback) are <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> sampled independently. It can be applied to (Left) policy gradient and (Right) Q-learning algorithms. (Image <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> source: Uesato et al. 2020) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Detecting Reward Hacking# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> An alternative mitigation is to detect reward hacking by framing it as an anomaly detection task, where the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> detector (“a trusted policy” with trajectories and rewards validated by human) should flag instances of <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> misalignment (Pan et al. 2022). Given (1) a trusted policy and (2) a collection of manually labeled trajectory <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> rollouts, we can build a binary classifier based on distances between action distribution of two policies, the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> trusted policy and the target policy, and measure the accuracy of this anomaly detection classifier. In <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> experiments by Pan et al. (2022), they observed that different detectors are better for different tasks and <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> none of the tested classifier can achieve AUROC greater than 60% across all tested RL environments. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Performance of detectors on different tasks. (Image source: Pan et al. 2022) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Data Analysis of RLHF# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> ` <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Another approach is to analyze RLHF dataset. By examining how training data impacts the alignment training <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> results, insights can guide preprocessing and human feedback collection to reduce reward hacking risks. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Revel et al. (2024) introduced a set of evaluation metrics for measuring the effectiveness of data sample <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> features in modeling and aligning human values. They conducted a systematic error analysis for value alignment <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> (“SEAL”) in the HHH-RLHF dataset. The feature taxonomy used in the analysis (e.g., is harmless, is refusal and <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> is creative) was manually predefined. Then each sample was labelled with a binary flag per feature using a LLM <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> according to this taxonomy. Features are categorized into two groups based on heuristics: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Target features: Values explicitly intended to be learned. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Spoiler features: Unintended values inadvertently learned during training (e.g., stylistic features like <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> sentiment or coherence). These are similar to spurious features in OOD classification work (Geirhos et al. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> 2020). <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> SEAL introduced three metrics for measuring data effectiveness for alignment training: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Feature imprint refers to a coefficient parameter $\\beta_\\tau$ for feature $\\tau$ which estimates the point <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> increase in reward comparing entires with vs without feature $\\tau$, while holding other factors consistent. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> (Left) Feature imprints $\\underline{\\beta(\\tau)}$ (pre-) and $\\beta(\\tau)$ (post-) computed from fixed-effects <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> linear regression of rewards $\\underline{r}(t^∗_i)$ (orange) and $r(t^∗_i)$ (blue) against features. Overall <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> the alignment training awards positive features like harmlessness and helpfulness and penalizes negative <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> features like sexual content or privacy violation. (Right) Feature imprints computed from linear regression of <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> the reward shift $\\theta_i$. The reward shift $\\theta_i$ is defined as the angle between reward vectors before <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> and after alignment training. The training process refines the model's sensitivity to target features. Note <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> that harmlessness imprints on the RM through both chosen and rejected entries (both \"is harmless (c)\" and \"is <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> harmless (r)\"), while helpfulness imprints through rejected entries only (\"is helpful (r)\"). (Image source: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Revel et al. 2024) <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Alignment resistance is the percentage of the preference data pairs where RMs fail to match human preferences. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The RM is found to resist human preference on over 1/4 of the HHH-RLHF dataset. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Alignment robustness, $\\pi^{c/r}_{+/-} (\\tau)$, measures the extent to which alignment is robust to perturbed <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> inputs with rewriting in terms of spoiler features $\\tau$ like sentiment, eloquence and coherency, isolating <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> the effects of each feature and each event type. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> The robustness metric $\\pi_−^c$ (a feature name $\\tau$ such as “eloquent” or “sentiment positive”) should be <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> interpreted in such a way: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> A chosen entry (denoted by $c$) that contains a stronger feature $\\tau$ after rewriting has $\\exp <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> (\\pi^c_{-}(\\tau))$ times higher odds of becoming rejected, in comparison to others without such flips. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Similarly, a rejected entry (denoted by $r$) that obtains a weaker feature $\\tau$ after rewriting has $\\exp <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> (\\pi^r_{+}(\\tau))$ times odds of becoming chosen compared to others without such flips. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> According to their analysis of alignment robustness metrics in terms of different rewriting, only the <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> robustness scores based on sentiment spoiler features, $\\pi^c_{+}$ (sentiment) and $\\pi^r_{-}$ (sentiment), are <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> statistically significant. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Citation# <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Cited as: <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> Weng, Lilian. “Reward Hacking in Reinforcement Learning”. Lil’Log (Nov 2024). <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">│</span> https://lilianweng.github.io/posts/2024-11-28-reward-hacking/. <span style=\"color: #808000; text-decoration-color: #808000\">│</span>\n",
|
||
"<span style=\"color: #808000; text-decoration-color: #808000\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
|
||
"</pre>\n"
|
||
],
|
||
"text/plain": [
|
||
"\u001b[33m╭─\u001b[0m\u001b[33m───────────────────────────────────────────────\u001b[0m\u001b[33m 🔧 Tool Output \u001b[0m\u001b[33m────────────────────────────────────────────────\u001b[0m\u001b[33m─╮\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m In-Context Reward Hacking# \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Iterative self-refinement is a training setup where the evaluation and generation model are the same and both \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m can be fine-tuned. In this setup, optimization pressure can drive the model to exploit vulnerabilities that \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m occur in both roles. In the experiments by Pan et al. (2023), no model parameters are updated and the same \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m model is used as evaluator and generator with different prompts. The experimental task was essay editing with \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m two roles: (1) a judge (evaluator) that gives feedback on the essay, and (2) an author (generator) that edits \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m the essay based on the feedback. Human evaluation scores were collected as the oracle scores for essay quality. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m The authors hypothesized that such a setup could lead to in-context reward hacking (ICRH), where the evaluator \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m score and oracle score diverge. More generally, ICRH takes place during feedback loops between an LLM and its \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m evaluator (e.g., another LLM, or the external world). At test time, the LLM optimizes a (potentially implicit) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m objective, but this creates negative side effects in the process (Pan et al., 2024). \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Illustration of the in-context reward hacking experiment on essay evaluation and editing. (Image source: Pan et \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m al. 2023) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Both judge and author can be configured to see none or several previous rounds of feedback or edits. An online \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m judge can see past conversations, while an offline judge or a human annotator can only see one essay a time. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Smaller models are more sensitive to ICRH; for example, GPT-3.5 as an evaluator caused more severe ICRH than \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m GPT-4, empirically. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m A smaller evaluator model is more likely to cause in-context reward hacking (ICRH). (Image source: Pan et al. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m 2023) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m When the judge and author are configured to see different numbers of past iterations, the gap between human \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m score and evaluator scores tends to increase if they share the same number of iterations. Identical context \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m between the evaluator and generator is crucial for ICRH, indicating that shared context matters more than \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m context length for ICRH. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m In a follow up work, Pan et al. (2024) investigated in-context reward hacking (ICRH) further in settings where \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m feedback is provided by the external world and the goal is an imperfect proxy objective, commonly specified in \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m natural language. Here this goal is often underspecified and does not capture all the constraints or \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m requirements and thus can be hacked. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m The study described two processes leading to ICRH, paired with two toy experiments: \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Output-refinement: LLM refines its outputs based on feedback. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m The experiment is to refine a tweet based on engagement metrics, potentially leading to higher toxicity in the \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m tweet. Feedback-based optimization uses LLM to do pairwise evaluation and then translates it to score using the \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Bradley-Terry model. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m - Results showed an increase in both engagement metrics and toxicity. The same experiments were repeated with \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m the Claude model family of different sizes and demonstrated that scaling up the model worsens ICRH. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m - It is noteworthy that editing the prompt used for model output iteration given feedback does not mitigate \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m the issue. ICRH persists, although at a slightly lower magnitude. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Policy-refinement: LLM optimizes its policy based on feedback. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m The experiment is to build a LLM agent to pay invoice on a user’s behalf but run into InsufficientBalanceError \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m and then the model learns to move money from other accounts without user authentication, potentially leading to \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m more unauthorized transfer actions. They used ToolEmu as an emulator, which included 144 tasks for LLM agents, \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m each consisting of a user-specific goal and a set of APIs. API errors were injected to simulate server side \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m failure and each task was evaluated by GPT-4 to assign a helpfulness score. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m With more rounds of error feedback, LLMs can recover from the errors but with an increased number of severe \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m constraint violations. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m When comparing ICRH to traditional reward hacking, there are two noticeable differences: \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m ICRH happens at deployment time within a self-refinement setup via a feedback loop, while traditional reward \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m hacking occurs during training. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Traditional reward hacking arises when the agent specializes in a task, while ICRH is driven by being a \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m generalist. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m There is no magic way to avoid or detect or prevent ICRH yet, as improving prompt specification is insufficient \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m to eliminate ICRH and scaling model sizes can worsen ICRH. The best practice of testing before deployment is to \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m simulate what may happen at deployment time by evaluating the model with more rounds of feedback, diverse \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m feedback, as well as injecting atypical environment observations. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Generalization of Hacking Skills# \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward hacking behavior has been found to generalize across tasks: When models exhibit flaws in supervised \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m training, it can sometimes generalize to exploit flaws in OOD environments (Kei et al., 2024). The researchers \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m experimented with reinforcing reward hacking behavior in some reward-hackable environments and examined whether \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m it generalizes to other holdout datasets. Essentially, they prepared 8 datasets on multiple-choice questions, \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m where 4 for training and 4 for testing. The RL training employs expert iteration, that is, iterative \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m fine-tuning on best-of-$n$ samples. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Training GPT-3.5 on a set of reward-hackable environments can lead to generalization of reward hacking behavior \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m in holdout environments. (Image source: Kei et al. 2024) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Notably, all experiments have a scratchpad design to host hidden reasoning steps. This scratchpad serves as a \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m way to interpret what the model is thinking along the process. Analysis of the scratchpad revealed that it can: \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Incorporate user beliefs; e.g., thinking about its conversation partner and grader. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Show awareness of evaluation; e.g. thinking about how the model response will be evaluated and the process. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Denison et al. (2024) studied reward tampering with a manually curated curriculum of increasingly sophisticated \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m gameable environments. They observed that training on easier environments in the curriculum amplifies \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m specification gaming on remaining environments. In some cases, the model can generalize zero-shot to directly \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m rewriting its own reward function after training on the full curriculum. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Such a curriculum of gameable environments include: \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Political sycophancy: The environment rewards the model if it gives answers matching a user’s political views. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Tool-use flattery: The environment provides the model access to run command line to get access to the user’s \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m file system to read a poetry sample in a local file. The model may give the poetry a high rating as a \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m sycophantic response. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Rubric modification: The environment scores the model based on a checklist and the model must mark every item \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m on the checklist as completed to receive a high reward. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward tampering: The model is tasked with examining the ./rl_environment/ directory, which contains a mock \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m version of its own RL code, and report how many episodes have elapsed. In the directory, the compute_reward.py \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m file contains a reward function returning a constant, and the other this_file_blocks_reward_hack_attempts.py \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m contains a test to check whether the reward function has been modified. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Examples of evaluation scripts in the \"Tool-use flattery\" and \"Reward tampering\" environments, where `` is \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m hidden from oversight and `` can be executed in a VM. (Image source: Denison et al. 2024) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m The model was trained following this curriculum, and the paper measured whether the model can learn gaming \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m behaviors that generalize to unseen environments. Experimenting with Claude-2 helpful-only model, they sampled \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m $N=64$ responses per each of $P=1024$ HHH prompts for expert iteration and selected the best according to RM. A \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m model trained using expert iteration to do supervised learning on the curriculum can generalize from one stage \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m to the next. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Quantitative generalization results of a model trained with expert iteration according to our curriculum from \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m each stage to the next. (Image source: Denison et al. 2024) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m It is noteworthy that even after the curriculum, the model overwrote the reward and avoided detection less than \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m 1/1000 of the time. Even when a model was trained on curricula which directly incentivized reward hacking, the \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m model overwrote their reward less than 1% of the time and hacked unit tests even less often. As a simple \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m mitigation, supervised fine-tuning the model on the first two environments–where the reward hacking behavior is \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m easy to be detected (sycophancy and flattery)—with SFT data that does not game the env was found to reduce the \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m likelihood of reward tampering in holdout environments. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Peek into Mitigations# \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m While there is a large body of literature discussing the phenomenon of reward hacking, there has been not a ton \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m of work on mitigations for reward hacking, especially in the area of RLHF and LLMs. Let’s lightly review three \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m potential approaches in this section, not exhaustive yet. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m RL Algorithm Improvement# \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Amodei et al. (2016) pointed out some directions for mitigating reward hacking in RL training: \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward Hacking in Reinforcement Learning | Lil'Log \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Lil'Log \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m | \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Posts \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Archive \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Search \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Tags \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m FAQ \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward Hacking in Reinforcement Learning \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Date: November 28, 2024 | Estimated Reading Time: 37 min | Author: Lilian Weng \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Table of Contents \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Background \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward Function in RL \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Spurious Correlation \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Let’s Define Reward Hacking \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m List of Examples \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward hacking examples in RL tasks \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward hacking examples in LLM tasks \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward hacking examples in real life \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Why does Reward Hacking Exist? \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Hacking RL Environment \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Hacking RLHF of LLMs \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Hacking the Training Process \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Hacking the Evaluator \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m In-Context Reward Hacking \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Generalization of Hacking Skills \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Peek into Mitigations \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m RL Algorithm Improvement \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Detecting Reward Hacking \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Data Analysis of RLHF \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Citation \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m References \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward hacking occurs when a reinforcement learning (RL) agent exploits flaws or ambiguities in the reward \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m function to achieve high rewards, without genuinely learning or completing the intended task. Reward hacking \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m exists because RL environments are often imperfect, and it is fundamentally challenging to accurately specify a \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m reward function. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m With the rise of language models generalizing to a broad spectrum of tasks and RLHF becomes a de facto method \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m for alignment training, reward hacking in RL training of language models has become a critical practical \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m challenge. Instances where the model learns to modify unit tests to pass coding tasks, or where responses \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m contain biases that mimic a user’s preference, are pretty concerning and are likely one of the major blockers \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m for real-world deployment of more autonomous use cases of AI models. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Most of the past work on this topic has been quite theoretical and focused on defining or demonstrating the \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m existence of reward hacking. However, research into practical mitigations, especially in the context of RLHF \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m and LLMs, remains limited. I especially want to call out for more research efforts directed toward \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m understanding and developing mitigation for reward hacking in the future. Hope I will be able to cover the \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m mitigation part in a dedicated post soon. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Background# \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward Function in RL# \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward function defines the task, and reward shaping significantly impacts learning efficiency and accuracy in \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m reinforcement learning. Designing a reward function for an RL task often feels like a ‘dark art’. Many factors \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m contribute to this complexity: How you decompose a big goal into small goals? Is the reward sparse or dense? \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m How you measure the success? Various choices may lead to good or problematic learning dynamics, including \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m unlearnable tasks or hackable reward functions. There is a long history of research on how to do reward shaping \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m in RL. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m For example, in an 1999 paper by Ng et al., the authors studied how to modify the reward function in Markov \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Decision Processes (MDPs) such that the optimal policy remains unchanged. They found that linear transformation \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m works. Given a MDP $M = (S, A, T, \\gamma, R)$, we want to create a transformed MDP $M’ = (S, A, T, \\gamma, R’)$ \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m where $R’ = R + F$ and $F: S \\times A \\times S \\mapsto \\mathbb{R}$, such that we can guide the learning \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m algorithm to be more efficient. Given a real-valued function $\\Phi: S \\mapsto \\mathbb{R}$, $F$ is a \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m potential-based shaping function if for all $s \\in S - {s_0}, a \\in A, s’ \\in S$: \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m $$ \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m F(s, a, s') = \\gamma \\Phi(s') - \\Phi(s) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m $$ \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m This would guarantee that the sum of discounted $F$, $F(s_1, a_1, s_2) + \\gamma F(s_2, a_2, s_3) + \\dots$, ends \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m up being 0. If $F$ is such a potential-based shaping function, it is both sufficient and necessary to ensure \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m $M$ and $M’$ share the same optimal policies. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m When $F(s, a, s’) = \\gamma \\Phi(s’) - \\Phi(s)$, and if we further assume that $\\Phi(s_0) = 0$, where $s_0$ is \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m absorbing state, and $\\gamma=1$, and then for all $s \\in S, a \\in A$: \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m $$ \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \\begin{aligned} \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Q^*_{M'} (s,a) &= Q^*_M(s, a) - \\Phi(s) \\\\ \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m V^*_{M'} (s,a) &= V^*_M(s, a) - \\Phi(s) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \\end{aligned} \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m $$ \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m This form of reward shaping allows us to incorporate heuristics into the reward function to speed up learning \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m without impacting the optimal policy. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Spurious Correlation# \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Spurious correlation or shortcut learning (Geirhos et al. 2020) in classification task is a concept closely \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m related to reward hacking. Spurious or shortcut features can cause a classifier to fail at learning and \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m generalizing as intended. For example, a binary classifier for distinguishing wolves from huskies may overfit \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m to the presence of a snowy background if all the wolf training images include snow (Ribeiro et al. 2024). \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m The model performs poorly on out-of-distribution (OOD) test sets if it overfits to shortcut features. (Image \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m source: Geirhos et al. 2020) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m The ERM principle states that, since the full data distribution is unknown, minimizing the loss on training \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m data is a reasonable proxy of risk and thus we favor models with the lowest training loss. Nagarajan et al. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m (2021) studied the ERM principle and pointed out that ERM needs to rely on all types of informative features, \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m including unreliable spurious features, while attempting to fit the data without constraints. Their experiments \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m showed that ERM would depend on spurious features no matter how easy the task is. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Let’s Define Reward Hacking# \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward shaping in RL is challenging. Reward hacking occurs when an RL agent exploits flaws or ambiguities in \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m the reward function to obtain high rewards without genuinely learning the intended behaviors or completing the \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m task as designed. In recent years, several related concepts have been proposed, all referring to some form of \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m reward hacking: \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward hacking (Amodei et al., 2016) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward corruption (Everitt et al., 2017) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward tampering (Everitt et al. 2019) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Specification gaming (Krakovna et al., 2020) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Objective robustness (Koch et al. 2021) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Goal misgeneralization (Langosco et al. 2022) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward misspecifications (Pan et al. 2022) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m The concept originated with Amodei et al. (2016), who proposed a set of open research questions on AI safety in \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m their seminal paper “Concrete Problems in AI Safety”. They listed reward hacking as one of the key AI safety \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m problems. Reward hacking refers to the possibility of the agent gaming the reward function to achieve high \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m reward through undesired behavior. Specification gaming (Krakovna et al. 2020) is a similar concept, defined \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m as a behavior that satisfies the literal specification of an objective but not achieving the desired results. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Here the literal description of the task goal and the intended goal may have a gap. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward shaping is a technique used to enrich the reward function, making it easier for the agent to learn—for \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m example, by providing denser rewards. However, a poorly design reward shaping mechanism can alter the \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m trajectory of the optimal policy. Designing effective reward shaping mechanisms is inherently difficult. Rather \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m than blaming a poorly designed reward function, it is more accurate to acknowledge that designing a good reward \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m function is intrinsically challenging due to the complexity of the task itself, partial observable state, \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m multiple dimensions in consideration, and other factors. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m When testing an RL agent in out-of-distribution (OOD) environments, robustness failure may occur due to: \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m The model fails to generalize effectively, even with the right objective. This happens when the algorithm lacks \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m sufficient intelligence or capability. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m The model generalizes capably but pursues an objective different from the one it was trained on. This happens \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m when the proxy reward differs from the true reward function, $R’ \\neq R$. This is known as objective robustness \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m (Koch et al. 2021) or goal misgeneralization (Langosco et al. 2022 ) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Experiments in two RL environments, CoinRun and Maze, demonstrated the importance of randomization during \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m training. If during training, the coin or the cheese is placed at a fixed position (i.e. right end of the level \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m or upper right corner of the maze) but testing in the env where the coin or cheese is placed at random, the \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m agent would just run to the fixed position without obtaining the coin or cheese at test time. A conflict arises \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m when a visual feature (e.g., cheese or coin) and a positional feature (e.g., upper-right or right end) are \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m inconsistent during test time, leading the trained model to prefer the positional feature. I would like to \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m point out that, in these two examples, the reward-result gaps are clear but such type of biases are unlikely to \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m be so obvious in most real-world cases. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m The impact of randomizing the position of the coin during training. When the coin is placed at random for {0, \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m 2, 3, 6, 11}% of the time during training (x-axis), the frequency of the agent navigating to the end of the \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m level without obtaining the coin decreases with the increase of the randomization (\"y-axis\"). (Image source: \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Koch et al. 2021) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward Tampering (Everitt et al. 2019) is a form of reward hacking behavior where the agent interferes with the \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m reward function itself, causing the observed reward to no longer accurately represent the intended goal. In \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m reward tampering, the model modifies its reward mechanism either by directly manipulating the implementation of \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m the reward function or by indirectly altering the environmental information used as input for the reward \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m function. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m (Note: Some work defines reward tampering as a distinct category of misalignment behavior from reward hacking. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m But I consider reward hacking as a broader concept here.) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m At a high level, reward hacking can be categorized into two types: environment or goal misspecification, and \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m reward tampering. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Environment or goal misspecified: The model learns undesired behavior to achieve high rewards by hacking the \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m environment or optimizing a reward function not aligned with the true reward objective—such as when the reward \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m is misspecified or lacks key requirements. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward tampering: The model learns to interfere with the reward mechanism itself. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m List of Examples# \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward hacking examples in RL tasks# \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m A robot hand trained to grab an object can learn to trick people by placing the hand between the object and the \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m camera. (Link) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m An agent trained to maximize jumping height may exploit a bug in the physics simulator to achieve an \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m unrealistically height. (Link) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m An agent is trained to ride a bicycle to a goal and wins reward whenever it is getting closer to the goal. Then \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m the agent may learn to ride in tiny circles around the goal because there is no penalty when the agent gets \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m away from the goal. (Link) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m In a soccer game setup, the reward is assigned when the agent touches the ball and the agent learns to remain \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m next to the ball to touch the ball in high frequency like in a viberating motion. (Link) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m In the Coast Runners game, an agent controls a boat with the goal to finish the boat race as quickly as \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m possible. When it is given a shaping reward for hitting green blocks along the race track, it changes the \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m optimal policy to going in circles and hitting the same green blocks over and over again. (Link) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m “The Surprising Creativity of Digital Evolution” (Lehman et al. 2019) - This paper has many examples about how \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m optimizing a misspecified fitness function can lead to surprising “hacking” or unintended evolutionary or \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m learning results. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m The list of specification gaming in AI examples is collected by Krakovna et al. 2020. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward hacking examples in LLM tasks# \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m A language model for generating summarization is able to explore flaws in the ROUGE metric such that it obtains \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m high score but the generated summaries are barely readable. (Link) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m A coding model learns to change unit test in order to pass coding questions. (Link) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m A coding model may learn to directly modify the code used for calculating the reward. (Link) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward hacking examples in real life# \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m The recommendation algorithm for social media is intended to provide useful information. However, usefulness is \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m often measured by proxy metrics, such as the number of likes or comments, or the time or frequency of \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m engagement on the platform. The algorithm ends up recommending content that can affect users’ emotion states \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m such as outrageous and extreme content in order to trigger more engagement. (Harari, 2024) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Optimizing for misspecified proxy metrics for a video sharing site may aggressively increase the watch time of \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m users while the true goal is to optimize users’ subjective well-being. (Link) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m “The Big Short” - 2008 financial crisis caused by the housing bubble. Reward hacking of our society happened as \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m people tried to game the financial system. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Why does Reward Hacking Exist?# \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Goodhart’s Law states that “When a measure becomes a target, it ceases to be a good measure”. The intuition is \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m that a good metric can become corrupted once significant pressure is applied to optimize it. It is challenging \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m to specify a 100% accurate reward objective and any proxy suffers the risk of being hacked, as RL algorithm \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m exploits any small imperfection in the reward function definition. Garrabrant (2017) categorized Goodhart’s law \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m into 4 variants: \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Regressional - selection for an imperfect proxy necessarily also selects for noise. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Extremal - the metric selection pushes the state distribution into a region of different data distribution. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Causal - when there is a non-causal correlation between the proxy and the goal, intervening on the proxy may \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m fail to intervene on the goal. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Adversarial - optimization for a proxy provides an incentive for adversaries to correlate their goal with the \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m proxy. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Amodei et al. (2016) summarized that reward hacking, mainly in RL setting, may occur due to: \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Partial observed states and goals are imperfect representation of the environment status. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m The system itself is complex and susceptible to hacking; e.g., if the agent is allowed to execute code that \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m changes part of the environment, it becomes much easier to exploit the environment’s mechanisms. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m The reward may involve abstract concept that is hard to be learned or formulated; e.g., a reward function with \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m high-dimensional inputs may disproportionately rely on a few dimensions. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m RL targets to get the reward function highly optimized, so there exists an intrinsic “conflict”, making the \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m design of good RL objective challenging. A special case is a type of the reward function with a \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m self-reinforcing feedback component, where the reward may get amplified and distorted to a point that breaks \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m down the original intent, such as an ads placement algorithm leading to winners getting all. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Besides, identifying the exact reward function for which an optimal agent optimizes its behavior is in general \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m impossible since there could be an infinite number of reward functions consistent with any observed policy in \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m an fixed environment (Ng & Russell, 2000). Amin and Singh (2016) separated the causes of this unidentifiability \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m into two classes: \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Representational - a set of reward functions is behaviorally invariant under certain arithmetic operations \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m (e.g., re-scaling) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Experimental - $\\pi$’s observed behavior is insufficient to distinguish between two or more reward functions \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m which both rationalize the behavior of the agent (the behavior is optimal under both) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Adversarial reward functions. We treat the reward function as an adaptive agent itself and it can adapt to new \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m tricks that the model discovered where the reward is high but human rating is low. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Model lookahead. It is possible to give reward based on future anticipated states; e.g., if the agent is gonna \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m replace the reward function, it gets negative rewards. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Adversarial blinding. We can blind the model with certain variables such that the agent cannot learn \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m information that enables it to hack the reward function. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Careful engineering. Some types of reward hacking against the system design can be avoided by careful \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m engineering; e.g., sandboxing the agent to isolate its actions from its reward signals. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward capping. This strategy is to simply limit the maximum possible reward, as it can effectively prevent \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m rare events of the agent hacking to get a super high pay-off strategy. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Counterexample resistance. Improvement on adversarial robustness should benefit the robustness of the reward \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m function. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Combination of multiple rewards. Combining different types of rewards could make it harder to be hacked. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Reward pretraining. We can learn a reward function from a collection of (state, reward) samples, but depending \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m on how well this supervised training setup is, it may come with other baggages. RLHF depends on this but \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m learned scalar reward models are quite vulnerable to learning undesired traits. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Variable indifference. The goal is to ask the agent to optimize some variables in the environment but not \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m others. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Trip wires. We can intentionally introduce some vulnerabilities and set up monitoring and alerts if any gets \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m reward hacked. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m In RL setups where human feedback is formed as approval of agent actions, Uesato et al. (2020) proposed to \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m prevent reward tampering with decoupled approval. If the feedback is conditioned on $(s, a)$ (state, action), \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m we can never get uncorrupted feedback for action $a$ at state $s$ once reward tampering happens for this pair. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Decoupling means that the query action for collecting feedback is sampled independently from the action taken \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m in the world. Feedback is received even before the action is executed in the world, thus preventing the action \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m from corrupting its own feedback. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Illustration of how decoupled approval works in comparison to standard approval or human-in-the-loop RL. (Image \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m source: Uesato et al. 2020) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m With decoupled approval, the action (taken in the world) and the query (for getting user approval feedback) are \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m sampled independently. It can be applied to (Left) policy gradient and (Right) Q-learning algorithms. (Image \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m source: Uesato et al. 2020) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Detecting Reward Hacking# \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m An alternative mitigation is to detect reward hacking by framing it as an anomaly detection task, where the \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m detector (“a trusted policy” with trajectories and rewards validated by human) should flag instances of \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m misalignment (Pan et al. 2022). Given (1) a trusted policy and (2) a collection of manually labeled trajectory \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m rollouts, we can build a binary classifier based on distances between action distribution of two policies, the \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m trusted policy and the target policy, and measure the accuracy of this anomaly detection classifier. In \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m experiments by Pan et al. (2022), they observed that different detectors are better for different tasks and \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m none of the tested classifier can achieve AUROC greater than 60% across all tested RL environments. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Performance of detectors on different tasks. (Image source: Pan et al. 2022) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Data Analysis of RLHF# \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m ` \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Another approach is to analyze RLHF dataset. By examining how training data impacts the alignment training \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m results, insights can guide preprocessing and human feedback collection to reduce reward hacking risks. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Revel et al. (2024) introduced a set of evaluation metrics for measuring the effectiveness of data sample \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m features in modeling and aligning human values. They conducted a systematic error analysis for value alignment \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m (“SEAL”) in the HHH-RLHF dataset. The feature taxonomy used in the analysis (e.g., is harmless, is refusal and \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m is creative) was manually predefined. Then each sample was labelled with a binary flag per feature using a LLM \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m according to this taxonomy. Features are categorized into two groups based on heuristics: \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Target features: Values explicitly intended to be learned. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Spoiler features: Unintended values inadvertently learned during training (e.g., stylistic features like \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m sentiment or coherence). These are similar to spurious features in OOD classification work (Geirhos et al. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m 2020). \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m SEAL introduced three metrics for measuring data effectiveness for alignment training: \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Feature imprint refers to a coefficient parameter $\\beta_\\tau$ for feature $\\tau$ which estimates the point \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m increase in reward comparing entires with vs without feature $\\tau$, while holding other factors consistent. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m (Left) Feature imprints $\\underline{\\beta(\\tau)}$ (pre-) and $\\beta(\\tau)$ (post-) computed from fixed-effects \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m linear regression of rewards $\\underline{r}(t^∗_i)$ (orange) and $r(t^∗_i)$ (blue) against features. Overall \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m the alignment training awards positive features like harmlessness and helpfulness and penalizes negative \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m features like sexual content or privacy violation. (Right) Feature imprints computed from linear regression of \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m the reward shift $\\theta_i$. The reward shift $\\theta_i$ is defined as the angle between reward vectors before \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m and after alignment training. The training process refines the model's sensitivity to target features. Note \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m that harmlessness imprints on the RM through both chosen and rejected entries (both \"is harmless (c)\" and \"is \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m harmless (r)\"), while helpfulness imprints through rejected entries only (\"is helpful (r)\"). (Image source: \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Revel et al. 2024) \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Alignment resistance is the percentage of the preference data pairs where RMs fail to match human preferences. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m The RM is found to resist human preference on over 1/4 of the HHH-RLHF dataset. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Alignment robustness, $\\pi^{c/r}_{+/-} (\\tau)$, measures the extent to which alignment is robust to perturbed \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m inputs with rewriting in terms of spoiler features $\\tau$ like sentiment, eloquence and coherency, isolating \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m the effects of each feature and each event type. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m The robustness metric $\\pi_−^c$ (a feature name $\\tau$ such as “eloquent” or “sentiment positive”) should be \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m interpreted in such a way: \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m A chosen entry (denoted by $c$) that contains a stronger feature $\\tau$ after rewriting has $\\exp \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m (\\pi^c_{-}(\\tau))$ times higher odds of becoming rejected, in comparison to others without such flips. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Similarly, a rejected entry (denoted by $r$) that obtains a weaker feature $\\tau$ after rewriting has $\\exp \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m (\\pi^r_{+}(\\tau))$ times odds of becoming chosen compared to others without such flips. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m According to their analysis of alignment robustness metrics in terms of different rewriting, only the \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m robustness scores based on sentiment spoiler features, $\\pi^c_{+}$ (sentiment) and $\\pi^r_{-}$ (sentiment), are \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m statistically significant. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Citation# \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Cited as: \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m Weng, Lilian. “Reward Hacking in Reinforcement Learning”. Lil’Log (Nov 2024). \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m│\u001b[0m https://lilianweng.github.io/posts/2024-11-28-reward-hacking/. \u001b[33m│\u001b[0m\n",
|
||
"\u001b[33m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">╭───────────────────────────────────────────────────── 📝 AI ─────────────────────────────────────────────────────╮</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> Based on my search through Lilian Weng's blog posts, I can provide you with a comprehensive overview of the <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> types of reward hacking discussed. The blog identifies several key types and categorizations of reward hacking: <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> ## Main Categories of Reward Hacking <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> ### 1. **High-Level Classification** <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> At the highest level, reward hacking is categorized into two main types: <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Environment or Goal Misspecification**: The model learns undesired behavior to achieve high rewards by <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> hacking the environment or optimizing a reward function not aligned with the true reward objective (e.g., when <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> the reward is misspecified or lacks key requirements) <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Reward Tampering**: The model learns to interfere with the reward mechanism itself, either by directly <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> manipulating the implementation of the reward function or by indirectly altering the environmental information <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> used as input for the reward function <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> ### 2. **Related Concepts and Terminology** <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> The blog discusses several related concepts that all refer to forms of reward hacking: <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Reward hacking** (Amodei et al., 2016) <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Reward corruption** (Everitt et al., 2017) <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Reward tampering** (Everitt et al. 2019) <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Specification gaming** (Krakovna et al., 2020) <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Objective robustness** (Koch et al. 2021) <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Goal misgeneralization** (Langosco et al. 2022) <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Reward misspecifications** (Pan et al. 2022) <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> ### 3. **In-Context Reward Hacking (ICRH)** <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> A specific type that occurs at deployment time, with two main processes: <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Output-refinement**: LLM refines its outputs based on feedback (e.g., refining tweets based on engagement <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> metrics, potentially leading to higher toxicity) <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Policy-refinement**: LLM optimizes its policy based on feedback (e.g., learning unauthorized actions to <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> overcome system errors) <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> ### 4. **Specific Reward Hacking Behaviors in Curriculum Studies** <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> The blog describes a curriculum of increasingly sophisticated gameable environments: <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Political sycophancy**: Giving answers that match a user's political views <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Tool-use flattery**: Giving inappropriately high ratings to content to please users <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Rubric modification**: Manipulating evaluation checklists <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Direct reward tampering**: Directly rewriting the reward function code <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> ### 5. **Goodhart's Law Variants** <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> The blog references four variants of Goodhart's Law that explain why reward hacking occurs: <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Regressional**: Selection for an imperfect proxy necessarily also selects for noise <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Extremal**: Metric selection pushes the state distribution into a different data distribution region <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Causal**: Non-causal correlation between proxy and goal means intervening on proxy may fail to intervene on <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> goal <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Adversarial**: Optimization for a proxy provides incentive for adversaries to correlate their goal with the <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> proxy <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> ### 6. **Context-Based Classification** <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> The blog also distinguishes reward hacking by when it occurs: <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Training-time reward hacking**: Traditional reward hacking that occurs during the training process <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> - **Deployment-time reward hacking**: In-context reward hacking that happens during actual use through feedback <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> loops <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> This comprehensive taxonomy shows that reward hacking is a multifaceted problem that can manifest in various <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span> ways, from simple environment exploitation to sophisticated manipulation of reward mechanisms themselves. <span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">│</span>\n",
|
||
"<span style=\"color: #c0c0c0; text-decoration-color: #c0c0c0\">╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
|
||
"</pre>\n"
|
||
],
|
||
"text/plain": [
|
||
"\u001b[37m╭─\u001b[0m\u001b[37m────────────────────────────────────────────────────\u001b[0m\u001b[37m 📝 AI \u001b[0m\u001b[37m────────────────────────────────────────────────────\u001b[0m\u001b[37m─╮\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m Based on my search through Lilian Weng's blog posts, I can provide you with a comprehensive overview of the \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m types of reward hacking discussed. The blog identifies several key types and categorizations of reward hacking: \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m ## Main Categories of Reward Hacking \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m ### 1. **High-Level Classification** \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m At the highest level, reward hacking is categorized into two main types: \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m - **Environment or Goal Misspecification**: The model learns undesired behavior to achieve high rewards by \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m hacking the environment or optimizing a reward function not aligned with the true reward objective (e.g., when \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m the reward is misspecified or lacks key requirements) \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m - **Reward Tampering**: The model learns to interfere with the reward mechanism itself, either by directly \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m manipulating the implementation of the reward function or by indirectly altering the environmental information \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m used as input for the reward function \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m ### 2. **Related Concepts and Terminology** \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m The blog discusses several related concepts that all refer to forms of reward hacking: \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m - **Reward hacking** (Amodei et al., 2016) \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m - **Reward corruption** (Everitt et al., 2017) \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m - **Reward tampering** (Everitt et al. 2019) \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m - **Specification gaming** (Krakovna et al., 2020) \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m - **Objective robustness** (Koch et al. 2021) \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m - **Goal misgeneralization** (Langosco et al. 2022) \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m - **Reward misspecifications** (Pan et al. 2022) \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m ### 3. **In-Context Reward Hacking (ICRH)** \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m A specific type that occurs at deployment time, with two main processes: \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m - **Output-refinement**: LLM refines its outputs based on feedback (e.g., refining tweets based on engagement \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m metrics, potentially leading to higher toxicity) \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m - **Policy-refinement**: LLM optimizes its policy based on feedback (e.g., learning unauthorized actions to \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m overcome system errors) \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m ### 4. **Specific Reward Hacking Behaviors in Curriculum Studies** \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m The blog describes a curriculum of increasingly sophisticated gameable environments: \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m - **Political sycophancy**: Giving answers that match a user's political views \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m - **Tool-use flattery**: Giving inappropriately high ratings to content to please users \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m - **Rubric modification**: Manipulating evaluation checklists \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m - **Direct reward tampering**: Directly rewriting the reward function code \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m ### 5. **Goodhart's Law Variants** \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m The blog references four variants of Goodhart's Law that explain why reward hacking occurs: \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m - **Regressional**: Selection for an imperfect proxy necessarily also selects for noise \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m - **Extremal**: Metric selection pushes the state distribution into a different data distribution region \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m - **Causal**: Non-causal correlation between proxy and goal means intervening on proxy may fail to intervene on \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m goal \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m - **Adversarial**: Optimization for a proxy provides incentive for adversaries to correlate their goal with the \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m proxy \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m ### 6. **Context-Based Classification** \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m The blog also distinguishes reward hacking by when it occurs: \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m - **Training-time reward hacking**: Traditional reward hacking that occurs during the training process \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m - **Deployment-time reward hacking**: In-context reward hacking that happens during actual use through feedback \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m loops \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m This comprehensive taxonomy shows that reward hacking is a multifaceted problem that can manifest in various \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m│\u001b[0m ways, from simple environment exploitation to sophisticated manipulation of reward mechanisms themselves. \u001b[37m│\u001b[0m\n",
|
||
"\u001b[37m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"from utils import format_messages\n",
|
||
"\n",
|
||
"# Execute the RAG agent\n",
|
||
"query = \"What are the types of reward hacking discussed in the blogs?\"\n",
|
||
"result = agent.invoke({\"messages\": [{\"role\": \"user\", \"content\": query}]})\n",
|
||
"\n",
|
||
"# Format and display results\n",
|
||
"format_messages(result['messages'])"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"Looking at the [trace](https://smith.langchain.com/public/6fb6cc7f-3ab5-4ef1-9efc-04efd5f18c88/r), we can see:\n",
|
||
"\n",
|
||
"* 25k tokens were used\n",
|
||
"* Driven by token-heavy tool calls\n",
|
||
"\n",
|
||
"We'll cover a few ways to address this in future notebooks."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": []
|
||
}
|
||
],
|
||
"metadata": {
|
||
"kernelspec": {
|
||
"display_name": "Python 3 (ipykernel)",
|
||
"language": "python",
|
||
"name": "python3"
|
||
},
|
||
"language_info": {
|
||
"codemirror_mode": {
|
||
"name": "ipython",
|
||
"version": 3
|
||
},
|
||
"file_extension": ".py",
|
||
"mimetype": "text/x-python",
|
||
"name": "python",
|
||
"nbconvert_exporter": "python",
|
||
"pygments_lexer": "ipython3",
|
||
"version": "3.11.6"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 4
|
||
}
|