{
  "id": 546302,
  "title": "Sharing My ARC Prize 2024 Code (31 Points in the final submission)",
  "content": "<p><a href=\"https://github.com/zoenguyenramirez/arc-prize-2024\" target=\"_blank\">https://github.com/zoenguyenramirez/arc-prize-2024</a><br>\n<a href=\"https://www.kaggle.com/code/zoenguyenramirez/fs-1-inherted-newzoe-v7\" target=\"_blank\">https://www.kaggle.com/code/zoenguyenramirez/fs-1-inherted-newzoe-v7</a></p>\n<p>Hi Kagglers! I'm excited to share my solution that scored 31 points in the ARC Prize 2024 competition. Instead of using existing language models, I took a \"from-scratch\" approach with custom transformer architectures, leading to some interesting findings.</p>\n<h2>🔑 Key Approaches &amp; Findings</h2>\n<ol>\n<li><strong>Active Inference</strong>: Implemented based on insights from MindAI/Jack Cole's team (a game-changer when I was stuck at 4 points!)</li>\n<li><strong>Reverse Augmentation</strong>: Originally implemented as \"consistency\", later discovered to align with MindAI's approach</li>\n<li><strong>Custom Positional Encoding</strong>: Developed a specialized <code>grid_encoding</code> that outperforms traditional NLP positional encoding</li>\n<li><strong>Architectural Experiments</strong>:<ul>\n<li>Transformer Mask Hack (disabled in final submission due to performance impact)</li>\n<li>Progressive Head (impact uncertain due to later-discovered bugs)</li></ul></li>\n<li><strong>Minimal Vocabulary</strong>: Efficient 19-token representation</li>\n</ol>\n<h2>🛠️ Technical Details</h2>\n<h3>Environment</h3>\n<ul>\n<li>Python 3.11.9</li>\n<li>PyTorch 2.2.1</li>\n</ul>\n<h3>Repository Structure</h3>\n<p>The code is organized into two main components:</p>\n<ul>\n<li><code>dev_folder</code>: Development and training code</li>\n<li><code>submission_folder</code>: Final submission code</li>\n</ul>\n<h2>📊 Performance Journey</h2>\n<ul>\n<li><strong>Initial Stage</strong>: 30-40% accuracy on public evaluation set with ~4 points on private test<br>\n(Note: This early version is not in the GitHub repo, which contains only the final submission)</li>\n<li><strong>Final Result</strong>: 31 points achieved using ensemble approach</li>\n</ul>\n<h2>🤔 Open Questions for the Community</h2>\n<ol>\n<li>Could this transformer-based approach reach the top of the leaderboard with further optimization? (I joined in the final month and couldn't explore larger models)</li>\n<li>Is the 85% grand prize threshold achievable with this architecture?</li>\n<li>What are your thoughts on specialized transformers versus general language models for this task?</li>\n</ol>\n<h2>🙏 Acknowledgments</h2>\n<p>Special thanks to:</p>\n<ul>\n<li>Competition organizers</li>\n<li>Mehran Kazeminia for the comprehensive previous solutions notebook</li>\n<li>MindAI's interview which provided crucial insights when I was stuck</li>\n<li><a href=\"https://github.com/michaelhodel/re-arc\" target=\"_blank\">michaelhodel/re-arc</a> and <a href=\"https://github.com/xu3kev/BARC\" target=\"_blank\">xu3kev/BARC</a> for their datasets</li>\n</ul>\n<h2>🔗 Links</h2>\n<ul>\n<li><a href=\"https://github.com/zoenguyenramirez/arc-prize-2024\" target=\"_blank\">GitHub Repository</a></li>\n<li><a href=\"https://www.youtube.com/watch?v=jSAT_RuJ_Cg\" target=\"_blank\">MindAI Interview</a></li>\n</ul>\n<p>Feel free to explore the code, provide feedback, or reach out with questions. Let's learn from each other and push the boundaries of what's possible with transformer architectures!</p>",
  "comments": [
    {
      "id": 3046045,
      "author_name": "CPMP",
      "author_url": "",
      "post_date": "2024-11-15T04:51:02.787000",
      "content": "<p>Thanks for sharing, will study your git repo. A score of 31 form scratch is impressive.</p>",
      "votes": 5,
      "replies": []
    },
    {
      "id": 3045996,
      "author_name": "Nikola Hu",
      "author_url": "",
      "post_date": "2024-11-15T03:40:05.653000",
      "content": "<h1>Some Key Components of the Implementation</h1>\n<h2>1. Token Definitions</h2>\n<pre><code> enum  Enum, auto\n\n ():\n    CELL_TOKEN_SIZE =         \n    PAD = auto()                \n    START = auto()              \n    START_INPUT = auto()        \n    END_INPUT = auto()          \n    START_OUTPUT = auto()       \n    END_OUTPUT = auto()         \n    END = auto()                \n    ROW_SEPARATOR = auto()      \n    COUNT_OF_TOKENS = auto()    \n\nVOCAB_SIZE = SpecialToken.COUNT_OF_TOKENS.value\n</code></pre>\n<h2>2. Grid Encoding</h2>\n<p>The grid encoding function combines four key positional elements:</p>\n<pre><code> ():\n     use_grid_encoder:\n        \n         torch.(x[:, :, :] &gt;= -), \n         torch.(x[:, :, :] &lt; max_grid_size), \n\n        \n        row_encodings = grid_encoding[:, x[:, :, ], :]\n        col_encodings = grid_encoding[:, x[:, :, ], :]\n        top_encodings = grid_encoding[:, x[:, :, ], :]    \n        sample_encoding = grid_encoding[:, x[:, :, ], :]  \n\n        \n        grid_encodings = torch.cat([\n            row_encodings * grid_scale[],\n            col_encodings * grid_scale[],\n            top_encodings * grid_scale[],\n            sample_encoding\n        ], dim=-)  \n\n         grid_encodings.squeeze()\n\n     positional_encoding[:, :seq_length, :]\n</code></pre>\n<h2>3. Attention Masking</h2>\n<pre><code> ():\n     input_ids.dim() == \n    batch_size, seq_length, *_ = input_ids.shape\n     batch_size == (end_of_example_indices)\n\n    \n    mask = torch.triu(torch.ones((seq_length, seq_length), device=device), diagonal=).()\n    mask = mask.unsqueeze().repeat(batch_size, , )\n\n    \n     mask_hack:\n         batch_index, end_index  (end_of_example_indices):\n             end_index &gt; \n            mask[batch_index, :, :end_index] = \n\n     mask\n</code></pre>\n<p>Note: The <code>mask_hack</code> option, which allows input tokens to see all other input tokens, did not improve model performance.</p>\n<h2>4. Loss Masking</h2>\n<p>The loss function only considers output tokens:</p>\n<pre><code> ():\n    prefix_length = torch.tensor(end_of_examples, device=target.device)    \n    mask = torch.arange(seq_length, device=target.device).unsqueeze() &lt; prefix_length.unsqueeze() - \n    target[mask] = SpecialToken.PAD.value\n\n     target\n</code></pre>\n<p>This implementation enables a decoder-only transformer architecture, eliminating the need for a separate encoder component.</p>",
      "votes": 5,
      "replies": []
    },
    {
      "id": 3048440,
      "author_name": "Nikola Hu",
      "author_url": "",
      "post_date": "2024-11-18T00:14:00.133000",
      "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F22580177%2F1882f27d117f014870751059d4ad1aba%2FSelection_001.png?generation=1731888674383323&amp;alt=media\" alt=\"\"></p>\n<p>This was the training trajectory, captured from the tensorboard.</p>\n<p>I used 3x 4090 in the beginning and 2x 4090 since Nov 6.</p>",
      "votes": 3,
      "replies": []
    },
    {
      "id": 3048297,
      "author_name": "Guillermo Perez G",
      "author_url": "",
      "post_date": "2024-11-17T18:08:35.360000",
      "content": "<p>Again, thanks for sharing and good luck for the next ARC contest! I hope the other kagglers do the same, since public scrutiny gives strength.</p>\n<p>I like this original solution, and I will try to analyze if there are other variants that help improve this solution, and I will let you know. I think that to reach 85% an efficient, simple and elegant solution should be used.</p>\n<p>I have seen other solutions and I don´t believe that training a model for each problem and then assembling them is an efficient solution, because how is it possible to assemble 100 models of 100 problems. It´s like training 100 people to solve 100 problems, when one person could solve 70 or 80 math problems.</p>\n<p>All the best</p>",
      "votes": 1,
      "replies": [
        {
          "id": 3048334,
          "author_name": "Nikola Hu",
          "author_url": "",
          "post_date": "2024-11-17T19:07:02.370000",
          "content": "<p>\"Regarding 'assembling them,' could you provide a reference for this approach?</p>\n<p>From my research, I've observed two main methods:</p>\n<ol>\n<li>Test-time fine-tuning on individual tasks, where the fine-tuned model exists only temporarily in memory during inference and is discarded afterward.</li>\n<li>A similar approach, but applying test-time fine-tuning across all tasks simultaneously (in this case, all 100 Kaggle ARC tasks), training for several hours before performing inference on the complete set of tasks.\"</li>\n</ol>",
          "votes": 0,
          "replies": [
            {
              "id": 3048347,
              "author_name": "Guillermo Perez G",
              "author_url": "",
              "post_date": "2024-11-17T19:38:15.700000",
              "content": "<p><a href=\"https://www.kaggle.com/code/ironbar/single-task-test-time-fine-tuning-for-arc24\" target=\"_blank\">https://www.kaggle.com/code/ironbar/single-task-test-time-fine-tuning-for-arc24</a></p>\n<p><a href=\"https://www.kaggle.com/competitions/arc-prize-2024/discussion/545671\" target=\"_blank\">https://www.kaggle.com/competitions/arc-prize-2024/discussion/545671</a></p>\n<p>:) </p>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3048442,
              "author_name": "Nikola Hu",
              "author_url": "",
              "post_date": "2024-11-18T00:21:27.517000",
              "content": "<p>It should still be the first method I listed. It's not so much like \"training 100 people to solve 100 problems\"; rather, it's more like training one person (pre-training) who then learns 100 tasks and solves them individually. This is more similar to how humans actually work - when a human faces a challenge, they think and modify their neural connections while solving it.</p>",
              "votes": 0,
              "replies": []
            }
          ]
        }
      ]
    },
    {
      "id": 3045985,
      "author_name": "",
      "author_url": "",
      "post_date": "2024-11-15T03:06:32.947000",
      "content": "",
      "votes": 0,
      "replies": []
    }
  ],
  "comment_count": 8,
  "messages": [
    {
      "id": 3045948,
      "postDate": "2024-11-15T00:53:20.330Z",
      "content": "<p><a href=\"https://github.com/zoenguyenramirez/arc-prize-2024\" target=\"_blank\">https://github.com/zoenguyenramirez/arc-prize-2024</a><br>\n<a href=\"https://www.kaggle.com/code/zoenguyenramirez/fs-1-inherted-newzoe-v7\" target=\"_blank\">https://www.kaggle.com/code/zoenguyenramirez/fs-1-inherted-newzoe-v7</a></p>\n<p>Hi Kagglers! I'm excited to share my solution that scored 31 points in the ARC Prize 2024 competition. Instead of using existing language models, I took a \"from-scratch\" approach with custom transformer architectures, leading to some interesting findings.</p>\n<h2>🔑 Key Approaches &amp; Findings</h2>\n<ol>\n<li><strong>Active Inference</strong>: Implemented based on insights from MindAI/Jack Cole's team (a game-changer when I was stuck at 4 points!)</li>\n<li><strong>Reverse Augmentation</strong>: Originally implemented as \"consistency\", later discovered to align with MindAI's approach</li>\n<li><strong>Custom Positional Encoding</strong>: Developed a specialized <code>grid_encoding</code> that outperforms traditional NLP positional encoding</li>\n<li><strong>Architectural Experiments</strong>:<ul>\n<li>Transformer Mask Hack (disabled in final submission due to performance impact)</li>\n<li>Progressive Head (impact uncertain due to later-discovered bugs)</li></ul></li>\n<li><strong>Minimal Vocabulary</strong>: Efficient 19-token representation</li>\n</ol>\n<h2>🛠️ Technical Details</h2>\n<h3>Environment</h3>\n<ul>\n<li>Python 3.11.9</li>\n<li>PyTorch 2.2.1</li>\n</ul>\n<h3>Repository Structure</h3>\n<p>The code is organized into two main components:</p>\n<ul>\n<li><code>dev_folder</code>: Development and training code</li>\n<li><code>submission_folder</code>: Final submission code</li>\n</ul>\n<h2>📊 Performance Journey</h2>\n<ul>\n<li><strong>Initial Stage</strong>: 30-40% accuracy on public evaluation set with ~4 points on private test<br>\n(Note: This early version is not in the GitHub repo, which contains only the final submission)</li>\n<li><strong>Final Result</strong>: 31 points achieved using ensemble approach</li>\n</ul>\n<h2>🤔 Open Questions for the Community</h2>\n<ol>\n<li>Could this transformer-based approach reach the top of the leaderboard with further optimization? (I joined in the final month and couldn't explore larger models)</li>\n<li>Is the 85% grand prize threshold achievable with this architecture?</li>\n<li>What are your thoughts on specialized transformers versus general language models for this task?</li>\n</ol>\n<h2>🙏 Acknowledgments</h2>\n<p>Special thanks to:</p>\n<ul>\n<li>Competition organizers</li>\n<li>Mehran Kazeminia for the comprehensive previous solutions notebook</li>\n<li>MindAI's interview which provided crucial insights when I was stuck</li>\n<li><a href=\"https://github.com/michaelhodel/re-arc\" target=\"_blank\">michaelhodel/re-arc</a> and <a href=\"https://github.com/xu3kev/BARC\" target=\"_blank\">xu3kev/BARC</a> for their datasets</li>\n</ul>\n<h2>🔗 Links</h2>\n<ul>\n<li><a href=\"https://github.com/zoenguyenramirez/arc-prize-2024\" target=\"_blank\">GitHub Repository</a></li>\n<li><a href=\"https://www.youtube.com/watch?v=jSAT_RuJ_Cg\" target=\"_blank\">MindAI Interview</a></li>\n</ul>\n<p>Feel free to explore the code, provide feedback, or reach out with questions. Let's learn from each other and push the boundaries of what's possible with transformer architectures!</p>",
      "rawMarkdown": "https://github.com/zoenguyenramirez/arc-prize-2024\nhttps://www.kaggle.com/code/zoenguyenramirez/fs-1-inherted-newzoe-v7\n\nHi Kagglers! I'm excited to share my solution that scored 31 points in the ARC Prize 2024 competition. Instead of using existing language models, I took a \"from-scratch\" approach with custom transformer architectures, leading to some interesting findings.\n\n## 🔑 Key Approaches & Findings\n1. **Active Inference**: Implemented based on insights from MindAI/Jack Cole's team (a game-changer when I was stuck at 4 points!)\n2. **Reverse Augmentation**: Originally implemented as \"consistency\", later discovered to align with MindAI's approach\n3. **Custom Positional Encoding**: Developed a specialized `grid_encoding` that outperforms traditional NLP positional encoding\n4. **Architectural Experiments**:\n   - Transformer Mask Hack (disabled in final submission due to performance impact)\n   - Progressive Head (impact uncertain due to later-discovered bugs)\n5. **Minimal Vocabulary**: Efficient 19-token representation\n\n## 🛠️ Technical Details\n### Environment\n- Python 3.11.9\n- PyTorch 2.2.1\n\n### Repository Structure\nThe code is organized into two main components:\n- `dev_folder`: Development and training code\n- `submission_folder`: Final submission code\n\n## 📊 Performance Journey\n- **Initial Stage**: 30-40% accuracy on public evaluation set with ~4 points on private test\n  (Note: This early version is not in the GitHub repo, which contains only the final submission)\n- **Final Result**: 31 points achieved using ensemble approach\n\n## 🤔 Open Questions for the Community\n1. Could this transformer-based approach reach the top of the leaderboard with further optimization? (I joined in the final month and couldn't explore larger models)\n2. Is the 85% grand prize threshold achievable with this architecture?\n3. What are your thoughts on specialized transformers versus general language models for this task?\n\n## 🙏 Acknowledgments\nSpecial thanks to:\n- Competition organizers\n- Mehran Kazeminia for the comprehensive previous solutions notebook\n- MindAI's interview which provided crucial insights when I was stuck\n- [michaelhodel/re-arc](https://github.com/michaelhodel/re-arc) and [xu3kev/BARC](https://github.com/xu3kev/BARC) for their datasets\n\n## 🔗 Links\n- [GitHub Repository](https://github.com/zoenguyenramirez/arc-prize-2024)\n- [MindAI Interview](https://www.youtube.com/watch?v=jSAT_RuJ_Cg)\n\nFeel free to explore the code, provide feedback, or reach out with questions. Let's learn from each other and push the boundaries of what's possible with transformer architectures!",
      "votes": 26
    },
    {
      "id": 3046045,
      "postDate": "2024-11-15T04:51:02.787Z",
      "content": "<p>Thanks for sharing, will study your git repo. A score of 31 form scratch is impressive.</p>",
      "rawMarkdown": "Thanks for sharing, will study your git repo. A score of 31 form scratch is impressive.",
      "votes": 5
    },
    {
      "id": 3045996,
      "postDate": "2024-11-15T03:40:05.653Z",
      "content": "<h1>Some Key Components of the Implementation</h1>\n<h2>1. Token Definitions</h2>\n<pre><code> enum  Enum, auto\n\n ():\n    CELL_TOKEN_SIZE =         \n    PAD = auto()                \n    START = auto()              \n    START_INPUT = auto()        \n    END_INPUT = auto()          \n    START_OUTPUT = auto()       \n    END_OUTPUT = auto()         \n    END = auto()                \n    ROW_SEPARATOR = auto()      \n    COUNT_OF_TOKENS = auto()    \n\nVOCAB_SIZE = SpecialToken.COUNT_OF_TOKENS.value\n</code></pre>\n<h2>2. Grid Encoding</h2>\n<p>The grid encoding function combines four key positional elements:</p>\n<pre><code> ():\n     use_grid_encoder:\n        \n         torch.(x[:, :, :] &gt;= -), \n         torch.(x[:, :, :] &lt; max_grid_size), \n\n        \n        row_encodings = grid_encoding[:, x[:, :, ], :]\n        col_encodings = grid_encoding[:, x[:, :, ], :]\n        top_encodings = grid_encoding[:, x[:, :, ], :]    \n        sample_encoding = grid_encoding[:, x[:, :, ], :]  \n\n        \n        grid_encodings = torch.cat([\n            row_encodings * grid_scale[],\n            col_encodings * grid_scale[],\n            top_encodings * grid_scale[],\n            sample_encoding\n        ], dim=-)  \n\n         grid_encodings.squeeze()\n\n     positional_encoding[:, :seq_length, :]\n</code></pre>\n<h2>3. Attention Masking</h2>\n<pre><code> ():\n     input_ids.dim() == \n    batch_size, seq_length, *_ = input_ids.shape\n     batch_size == (end_of_example_indices)\n\n    \n    mask = torch.triu(torch.ones((seq_length, seq_length), device=device), diagonal=).()\n    mask = mask.unsqueeze().repeat(batch_size, , )\n\n    \n     mask_hack:\n         batch_index, end_index  (end_of_example_indices):\n             end_index &gt; \n            mask[batch_index, :, :end_index] = \n\n     mask\n</code></pre>\n<p>Note: The <code>mask_hack</code> option, which allows input tokens to see all other input tokens, did not improve model performance.</p>\n<h2>4. Loss Masking</h2>\n<p>The loss function only considers output tokens:</p>\n<pre><code> ():\n    prefix_length = torch.tensor(end_of_examples, device=target.device)    \n    mask = torch.arange(seq_length, device=target.device).unsqueeze() &lt; prefix_length.unsqueeze() - \n    target[mask] = SpecialToken.PAD.value\n\n     target\n</code></pre>\n<p>This implementation enables a decoder-only transformer architecture, eliminating the need for a separate encoder component.</p>",
      "rawMarkdown": "# Some Key Components of the Implementation\n\n## 1. Token Definitions\n```python\nfrom enum import Enum, auto\n\nclass SpecialToken(Enum):\n    CELL_TOKEN_SIZE = 10        # Tokens 0-9 reserved for cell values\n    PAD = auto()                # Token 11: Padding token\n    START = auto()              # Token 12: Sequence start\n    START_INPUT = auto()        # Token 13: Input section start\n    END_INPUT = auto()          # Token 14: Input section end\n    START_OUTPUT = auto()       # Token 15: Output section start\n    END_OUTPUT = auto()         # Token 16: Output section end\n    END = auto()                # Token 17: Sequence end\n    ROW_SEPARATOR = auto()      # Token 18: Separates rows in the grid\n    COUNT_OF_TOKENS = auto()    # Token 19: Total token count\n\nVOCAB_SIZE = SpecialToken.COUNT_OF_TOKENS.value\n```\n\n## 2. Grid Encoding\nThe grid encoding function combines four key positional elements:\n```python\ndef combine_encoding(x: torch.Tensor, batch_size: int, use_grid_encoder: bool, \n                    seq_length: int, max_grid_size: int, grid_scale: torch.Tensor, \n                    grid_encoding: torch.Tensor, positional_encoding: torch.Tensor):\n    if use_grid_encoder:\n        # Validate input ranges\n        assert torch.all(x[:, :, 1:] >= -1), \"Indices out of range\"\n        assert torch.all(x[:, :, 1:] < max_grid_size), \"Indices out of range\"\n        \n        # Extract positional encodings\n        row_encodings = grid_encoding[:, x[:, :, 1], :]\n        col_encodings = grid_encoding[:, x[:, :, 2], :]\n        top_encodings = grid_encoding[:, x[:, :, 3], :]    # Topology/chart information\n        sample_encoding = grid_encoding[:, x[:, :, 4], :]  # Grid index\n        \n        # Combine encodings with scaling\n        grid_encodings = torch.cat([\n            row_encodings * grid_scale[0],\n            col_encodings * grid_scale[1],\n            top_encodings * grid_scale[2],\n            sample_encoding\n        ], dim=-1)  # Shape: (N, seq_length, embed_size // 2)\n        \n        return grid_encodings.squeeze(0)\n    \n    return positional_encoding[:, :seq_length, :]\n```\n\n## 3. Attention Masking\n```python\ndef create_mask(input_ids, device, end_of_example_indices: List[int], mask_hack=False):\n    assert input_ids.dim() == 3\n    batch_size, seq_length, *_ = input_ids.shape\n    assert batch_size == len(end_of_example_indices)\n    \n    # Create upper triangular mask\n    mask = torch.triu(torch.ones((seq_length, seq_length), device=device), diagonal=1).bool()\n    mask = mask.unsqueeze(0).repeat(batch_size, 1, 1)\n    \n    # Optional: Allow full visibility of input tokens\n    if mask_hack:\n        for batch_index, end_index in enumerate(end_of_example_indices):\n            assert end_index > 0\n            mask[batch_index, :, :end_index] = 0\n            \n    return mask\n```\nNote: The `mask_hack` option, which allows input tokens to see all other input tokens, did not improve model performance.\n\n## 4. Loss Masking\nThe loss function only considers output tokens:\n```python\ndef prefix_mask(target, seq_length, end_of_examples: List[int]):\n    prefix_length = torch.tensor(end_of_examples, device=target.device)    \n    mask = torch.arange(seq_length, device=target.device).unsqueeze(0) < prefix_length.unsqueeze(1) - 1\n    target[mask] = SpecialToken.PAD.value\n    \n    return target\n```\n\nThis implementation enables a decoder-only transformer architecture, eliminating the need for a separate encoder component.",
      "votes": 5
    },
    {
      "id": 3048440,
      "postDate": "2024-11-18T00:14:00.133Z",
      "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F22580177%2F1882f27d117f014870751059d4ad1aba%2FSelection_001.png?generation=1731888674383323&amp;alt=media\" alt=\"\"></p>\n<p>This was the training trajectory, captured from the tensorboard.</p>\n<p>I used 3x 4090 in the beginning and 2x 4090 since Nov 6.</p>",
      "rawMarkdown": "![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F22580177%2F1882f27d117f014870751059d4ad1aba%2FSelection_001.png?generation=1731888674383323&alt=media)\n\nThis was the training trajectory, captured from the tensorboard.\n\nI used 3x 4090 in the beginning and 2x 4090 since Nov 6.",
      "votes": 3
    },
    {
      "id": 3048297,
      "postDate": "2024-11-17T18:08:35.360Z",
      "content": "<p>Again, thanks for sharing and good luck for the next ARC contest! I hope the other kagglers do the same, since public scrutiny gives strength.</p>\n<p>I like this original solution, and I will try to analyze if there are other variants that help improve this solution, and I will let you know. I think that to reach 85% an efficient, simple and elegant solution should be used.</p>\n<p>I have seen other solutions and I don´t believe that training a model for each problem and then assembling them is an efficient solution, because how is it possible to assemble 100 models of 100 problems. It´s like training 100 people to solve 100 problems, when one person could solve 70 or 80 math problems.</p>\n<p>All the best</p>",
      "rawMarkdown": "Again, thanks for sharing and good luck for the next ARC contest! I hope the other kagglers do the same, since public scrutiny gives strength.\n\nI like this original solution, and I will try to analyze if there are other variants that help improve this solution, and I will let you know. I think that to reach 85% an efficient, simple and elegant solution should be used.\n\nI have seen other solutions and I don´t believe that training a model for each problem and then assembling them is an efficient solution, because how is it possible to assemble 100 models of 100 problems. It´s like training 100 people to solve 100 problems, when one person could solve 70 or 80 math problems.\n\nAll the best",
      "votes": 1,
      "replies": [
        {
          "id": 3048334,
          "postDate": "2024-11-17T19:07:02.370Z",
          "content": "<p>\"Regarding 'assembling them,' could you provide a reference for this approach?</p>\n<p>From my research, I've observed two main methods:</p>\n<ol>\n<li>Test-time fine-tuning on individual tasks, where the fine-tuned model exists only temporarily in memory during inference and is discarded afterward.</li>\n<li>A similar approach, but applying test-time fine-tuning across all tasks simultaneously (in this case, all 100 Kaggle ARC tasks), training for several hours before performing inference on the complete set of tasks.\"</li>\n</ol>",
          "rawMarkdown": "\"Regarding 'assembling them,' could you provide a reference for this approach?\n\nFrom my research, I've observed two main methods:\n\n1. Test-time fine-tuning on individual tasks, where the fine-tuned model exists only temporarily in memory during inference and is discarded afterward.\n2. A similar approach, but applying test-time fine-tuning across all tasks simultaneously (in this case, all 100 Kaggle ARC tasks), training for several hours before performing inference on the complete set of tasks.\"",
          "replies": [
            {
              "id": 3048347,
              "postDate": "2024-11-17T19:38:15.700Z",
              "content": "<p><a href=\"https://www.kaggle.com/code/ironbar/single-task-test-time-fine-tuning-for-arc24\" target=\"_blank\">https://www.kaggle.com/code/ironbar/single-task-test-time-fine-tuning-for-arc24</a></p>\n<p><a href=\"https://www.kaggle.com/competitions/arc-prize-2024/discussion/545671\" target=\"_blank\">https://www.kaggle.com/competitions/arc-prize-2024/discussion/545671</a></p>\n<p>:) </p>",
              "rawMarkdown": "https://www.kaggle.com/code/ironbar/single-task-test-time-fine-tuning-for-arc24\n\nhttps://www.kaggle.com/competitions/arc-prize-2024/discussion/545671\n\n:) \n"
            },
            {
              "id": 3048442,
              "postDate": "2024-11-18T00:21:27.517Z",
              "content": "<p>It should still be the first method I listed. It's not so much like \"training 100 people to solve 100 problems\"; rather, it's more like training one person (pre-training) who then learns 100 tasks and solves them individually. This is more similar to how humans actually work - when a human faces a challenge, they think and modify their neural connections while solving it.</p>",
              "rawMarkdown": "It should still be the first method I listed. It's not so much like \"training 100 people to solve 100 problems\"; rather, it's more like training one person (pre-training) who then learns 100 tasks and solves them individually. This is more similar to how humans actually work - when a human faces a challenge, they think and modify their neural connections while solving it."
            }
          ]
        }
      ]
    },
    {
      "id": 3045985,
      "postDate": "2024-11-15T03:06:32.947Z",
      "rawMarkdown": "",
      "isDeleted": true
    }
  ],
  "complete": true,
  "source": "live",
  "fetched_at": "2026-10-19T22:22:27Z",
  "competition_id": 67357,
  "competition_slug": "arc-prize-2024",
  "team_id": 12633121,
  "solution_url": "/competitions/arc-prize-2024/writeups/nikola-hu-sharing-my-arc-prize-2024-code-31-points"
}