## Part 1: Neural Network Weight Denoising (50%)

### Challenge Description

You are provided with neural network weights that have been corrupted by noise. Your task is to build a denoising model that can recover the original clean weights from noisy observations.

### Data Format

1. **`train_part1_clean.csv`** - Clean neural network weights for training reference
2. **`train_part1_noise.csv`** - Noisy version of training weights (YOUR specific noise pattern)
3. **`test_part1.csv`** - Noisy test weights that YOU need to denoise

Each CSV file contains:
- A very large number of numerical values
- These represent flattened and reshaped weights from a pretrained neural network
- All values are floating-point numbers representing model parameters

**Important:** Each team has a DIFFERENT noise pattern applied to their data. Do not share or use data from other teams' folders!

### Your Task

1. **Analyze the noise pattern** in YOUR noisy data compared to clean data
   - Compare `train_part1_noise.csv` with `train_part1_clean.csv`
   - Each team has a different noise pattern!
2. **Build a denoising model** that learns to map noisy weights back to clean weights
3. **Train your model** on the provided training data
4. **Denoise YOUR test file** (`noise_test_part1.csv` from your team folder)
5. **Submit your predictions** as `<TeamID>_denoised_test_part1.csv` (this will be used in Part 2!)


## Part 2: Machine Translation with LSTM (50%)

### Challenge Description

In this part, you'll use the denoised weights from Part 1 to reconstruct an LSTM model that has been trained to translate from a mystery language to English.

### What You'll Receive

**Common Files (available to all teams):**
1. **`boilerplate.ipynb`** - Jupyter Notebook with starter code (see below)

**Team-Specific Files (in your `<TeamID>_<TeamName>/` folder):**
1. **`train_part2.csv`** - YOUR team's parallel corpus containing:
   - `encoded_text`: Text in the mystery encoded language
   - `text`: Corresponding English translations
   
2. **`test_part2.csv`** - YOUR team's specific encoded phrases to translate
   - These phrases are unique to your team
   - Will include team member names and email addresses

3. **`<TeamID>_denoised_test_part1.csv`** (YOUR output from Part 1) - Contains the denoised weights of the pretrained LSTM model

The boilerplate notebook provides code to:
- Load your denoised weights
- Initialize the LSTM model
- Process the training data
- Provide the model architecture

### Your Task

#### Step 1: Denoise the Model Weights
- Use your denoising model from Part 1 to clean `noise_test_part1.csv`
- Save as `<TeamID>_denoised_test_part1.csv`

#### Step 2: Load the Pretrained Model
- Use boilerplate code to initialize the LSTM with your denoised weights
- Examine the model architecture to understand input/output formats
- **Note:** Teams with better denoising performance will start with a better pretrained model

#### Step 3: Train the Translation Model
- Structure your dataset according to the model's requirements
- Fine-tune/train the LSTM model on the provided parallel corpus
- The model should learn to translate from the encoded language to English

#### Step 4: Translate Team-Specific Phrases
- Load `test_part2.csv` from your team folder
- Translate the specific encoded phrases
- These may include your team members' names and email addresses
- Accurate translation of these phrases will determine your Part 2 score

### Model Architecture

This is an LSTM based encoder-decoder model, an architecture that was used for translation purposes before the Transformer came along. The input and output vocab sizes are fixed based on your datasets and so are the embedding sizes and hidden dimensions.