Techniques to improve reliability
I feel like there should be a LLM architecture which includes "scratch space" - tokens the model can write to and read from which do not constitute part of its output.  The trouble with current architectures is that they can only do a finite amount of computation per output token - they get one forward pass and then have to output something.  Chain-of-thought reasoning allows the model to devote more computation to finding the answer, storing intermediate results in its output tokens.  But this is silly - most of the intermediate tokens are not providing useful information towards solving the problem, they're just wasted computation:<p>>There are 16 balls in total. 
>Half of the balls are golf balls. 
>That means that there are 8 golf balls. 
>Half of the golf balls are blue. 
>That means that there are 4 blue golf balls.<p>For the number of forward passes being done to generate this text, only a few tokens are actually helpful - most are grammatical filler.  Further, the model is losing information by being forced to project its state down to a single output token.  Even more, the most probable one-step output may not even be the most informative or helpful!<p>It'd be much nicer if the model could write arbitrary, continuous-valued tokens to a private scratch space and then attend to those tokens as though they were words in the prompt while generating the actual output, potentially performing several forward passes per output token when necessary.<p>In short, if chain-of-thought prompting is such a good idea, we should bake it into the model.  Obviously all of this is FAR easier said than done.