humancompatible-train 0.1.2__tar.gz → 0.1.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. {humancompatible_train-0.1.2/humancompatible_train.egg-info → humancompatible_train-0.1.4}/PKG-INFO +46 -20
  2. {humancompatible_train-0.1.2 → humancompatible_train-0.1.4}/README.md +39 -20
  3. humancompatible_train-0.1.4/experiments/run_dutch.py +439 -0
  4. humancompatible_train-0.1.4/experiments/run_experiment.py +196 -0
  5. {humancompatible_train-0.1.2 → humancompatible_train-0.1.4}/experiments/run_folktables.py +145 -108
  6. {humancompatible_train-0.1.2 → humancompatible_train-0.1.4}/humancompatible/train/algorithms/__init__.py +1 -0
  7. {humancompatible_train-0.1.2 → humancompatible_train-0.1.4}/humancompatible/train/algorithms/ssl_alm.py +1 -2
  8. humancompatible_train-0.1.4/humancompatible/train/algorithms/ssl_alm_adam.py +330 -0
  9. humancompatible_train-0.1.4/humancompatible/train/algorithms/test/test_ssl_alm_adam.py +146 -0
  10. {humancompatible_train-0.1.2 → humancompatible_train-0.1.4}/humancompatible/train/fairness/utils/balanced_batch_sampler.py +5 -4
  11. {humancompatible_train-0.1.2 → humancompatible_train-0.1.4}/humancompatible/train/fairness/utils/tests/test_balanced_batch_sampler.py +2 -0
  12. {humancompatible_train-0.1.2 → humancompatible_train-0.1.4/humancompatible_train.egg-info}/PKG-INFO +46 -20
  13. {humancompatible_train-0.1.2 → humancompatible_train-0.1.4}/humancompatible_train.egg-info/SOURCES.txt +4 -6
  14. {humancompatible_train-0.1.2 → humancompatible_train-0.1.4}/humancompatible_train.egg-info/requires.txt +8 -0
  15. {humancompatible_train-0.1.2 → humancompatible_train-0.1.4}/pyproject.toml +2 -1
  16. humancompatible_train-0.1.2/experiments/run_folktables_torchalgs.py +0 -956
  17. humancompatible_train-0.1.2/humancompatible/train/fairness/constraints/__init__.py +0 -15
  18. humancompatible_train-0.1.2/humancompatible/train/fairness/constraints/constraint.py +0 -97
  19. humancompatible_train-0.1.2/humancompatible/train/fairness/constraints/constraint_fns.py +0 -244
  20. humancompatible_train-0.1.2/humancompatible/train/fairness/constraints/torch/__init__.py +0 -1
  21. humancompatible_train-0.1.2/humancompatible/train/fairness/constraints/torch/constraints.py +0 -36
  22. {humancompatible_train-0.1.2 → humancompatible_train-0.1.4}/LICENCE.txt +0 -0
  23. {humancompatible_train-0.1.2 → humancompatible_train-0.1.4}/experiments/__init__.py +0 -0
  24. {humancompatible_train-0.1.2 → humancompatible_train-0.1.4}/experiments/calculate_iteration_values.py +0 -0
  25. {humancompatible_train-0.1.2 → humancompatible_train-0.1.4}/humancompatible/__init__.py +0 -0
  26. {humancompatible_train-0.1.2 → humancompatible_train-0.1.4}/humancompatible/train/__init__.py +0 -0
  27. {humancompatible_train-0.1.2 → humancompatible_train-0.1.4}/humancompatible/train/algorithms/ssw.py +0 -0
  28. {humancompatible_train-0.1.2 → humancompatible_train-0.1.4}/humancompatible/train/algorithms/test/__init__.py +0 -0
  29. {humancompatible_train-0.1.2 → humancompatible_train-0.1.4}/humancompatible/train/algorithms/test/test_ssl_alm.py +0 -0
  30. {humancompatible_train-0.1.2 → humancompatible_train-0.1.4}/humancompatible/train/algorithms/test/test_ssw.py +0 -0
  31. {humancompatible_train-0.1.2 → humancompatible_train-0.1.4}/humancompatible/train/fairness/__init__.py +0 -0
  32. {humancompatible_train-0.1.2 → humancompatible_train-0.1.4}/humancompatible/train/fairness/utils/__init__.py +0 -0
  33. {humancompatible_train-0.1.2 → humancompatible_train-0.1.4}/humancompatible/train/fairness/utils/tests/__init__.py +0 -0
  34. {humancompatible_train-0.1.2 → humancompatible_train-0.1.4}/humancompatible_train.egg-info/dependency_links.txt +0 -0
  35. {humancompatible_train-0.1.2 → humancompatible_train-0.1.4}/humancompatible_train.egg-info/top_level.txt +0 -0
  36. {humancompatible_train-0.1.2 → humancompatible_train-0.1.4}/setup.cfg +0 -0
  37. {humancompatible_train-0.1.2 → humancompatible_train-0.1.4}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: humancompatible-train
3
- Version: 0.1.2
3
+ Version: 0.1.4
4
4
  Summary: PyTorch-based package for constrained training of neural networks
5
5
  Author: Gilles Bareilles, Jana Lepsova, Jakub Marecek
6
6
  Author-email: Andrii Kliachkin <kliachkin.andrii@gmail.com>
@@ -10,6 +10,13 @@ Description-Content-Type: text/markdown
10
10
  License-File: LICENCE.txt
11
11
  Requires-Dist: torch
12
12
  Requires-Dist: numpy
13
+ Provides-Extra: examples
14
+ Requires-Dist: ipykernel; extra == "examples"
15
+ Requires-Dist: ipympl; extra == "examples"
16
+ Requires-Dist: fairret; extra == "examples"
17
+ Requires-Dist: folktables; extra == "examples"
18
+ Requires-Dist: scikit-learn; extra == "examples"
19
+ Requires-Dist: matplotlib; extra == "examples"
13
20
  Provides-Extra: benchmark
14
21
  Requires-Dist: fairret; extra == "benchmark"
15
22
  Requires-Dist: matplotlib; extra == "benchmark"
@@ -31,22 +38,23 @@ The toolkit implements algorithms for constrained training of neural networks ba
31
38
  <!-- , as well as a tool to compare stochastic-constrained stochastic optimization algorithms on a _fair learning_ task in the `experiments` folder. -->
32
39
 
33
40
  ## Table of Contents
41
+
34
42
  1. [Basic installation instructions](#basic-installation-instructions)
35
43
  2. [Using the toolkit](#using-the-toolkit)
36
- 3. [Extending the toolkit](#extending-the-toolkit)
44
+ 3. [Extending the toolkit](#extending-the-toolkit)
37
45
  4. [Reproducing the Benchmark](#reproducing-the-benchmark)
38
46
  5. [License and terms of use](#license-and-terms-of-use)
39
47
  6. [References](#references)
40
48
 
41
49
  humancompatible-train is still under active development! If you find bugs or have feature
42
50
  requests, please file a
43
- [Github issue](https://github.com/humancompatible/train/issues).
51
+ [Github issue](https://github.com/humancompatible/train/issues).
44
52
 
45
53
  ## Installation
46
54
 
47
55
  Use
48
56
 
49
- ```
57
+ ```bash
50
58
  pip install humancompatible-train
51
59
  ```
52
60
 
@@ -56,11 +64,11 @@ The only dependencies of this package are `numpy` and `torch`.
56
64
 
57
65
  The toolkit implements algorithms for constrained training of neural networks based on PyTorch.
58
66
 
59
- The algorithms follow the `dual_step()` - `step()` framework: taking inspiration from PyTorch, the `double_step` does updates related to the dual parameters and prepares for the primal update (by, e.g., saving constraint gradients), and `step()` updates the primal parameters.
67
+ The algorithms follow the `dual_step()` - `step()` framework: taking inspiration from PyTorch, the `dual_step()` does updates related to the dual parameters and prepares for the primal update (by, e.g., saving constraint gradients), and `step()` updates the primal parameters.
60
68
 
61
69
  In general, your code using `humancompatible-train` would look something like this:
62
70
 
63
- ```
71
+ ```python
64
72
  for inputs, labels in dataloader:
65
73
  # inference
66
74
  outputs = model(inputs)
@@ -79,6 +87,7 @@ for inputs, labels in dataloader:
79
87
  ```
80
88
 
81
89
  Our idea is to
90
+
82
91
  1. Deviate minimally from the usual PyTorch workflow
83
92
  2. Make different stochastic-constrained stochastic optimization algorithms nearly interchangable in the code.
84
93
 
@@ -86,6 +95,12 @@ Our idea is to
86
95
 
87
96
  You are invited to check out our new API presented in notebooks in the `examples` folder.
88
97
 
98
+ The example notebooks have additional dependencies, such as `fairret`. To install those, run
99
+
100
+ ```
101
+ pip install humancompatible-train[examples]
102
+ ```
103
+
89
104
  *The legacy API used for the benchmark is presented in `examples/_old_/algorithm_demo.ipynb` and `examples/_old_/constraint_demo.ipynb`.*
90
105
 
91
106
  ## Extending the toolkit
@@ -99,21 +114,27 @@ You are invited to check out our new API presented in notebooks in the `examples
99
114
  The code used in [our benchmark paper](https://arxiv.org/abs/2507.04033) is not migrated to the new API yet (WIP).
100
115
 
101
116
  ### Basic installation instructions
117
+
102
118
  The code requires Python version ```3.11```.
103
119
 
104
120
  1. Create a virtual environment
105
121
 
106
122
  **bash** (Linux)
123
+
107
124
  ```
108
125
  python3.11 -m venv fairbenchenv
109
126
  source fairbenchenv/bin/activate
110
127
  ```
128
+
111
129
  **cmd** (Windows)
130
+
112
131
  ```
113
132
  python -m venv fairbenchenv
114
133
  fairbenchenv\Scripts\activate.bat
115
134
  ```
135
+
116
136
  2. Install from source.
137
+
117
138
  ```
118
139
  git clone https://github.com/humancompatible/train.git
119
140
  cd train
@@ -122,11 +143,12 @@ pip install .
122
143
  ```
123
144
 
124
145
  If you wish to edit the code of the algorithms, install as an editable package:
146
+
125
147
  ```
126
148
  pip install -e .
127
149
  ```
128
150
 
129
- __Warning__: it is recommended to use Stochastic Ghost with the mkl-accelerated version of the scipy package with Stochastic Ghost; to install it, run
151
+ **Warning**: it is recommended to use Stochastic Ghost with the mkl-accelerated version of the scipy package with Stochastic Ghost; to install it, run
130
152
 
131
153
  ```pip install --force-reinstall -i https://software.repos.intel.com/python/pypi scipy```
132
154
 
@@ -140,12 +162,14 @@ after installing requirements.txt; otherwise, the algorithm will run slower. How
140
162
  ### Running the algorithms
141
163
 
142
164
  The benchmark comprises the following algorithms:
165
+
143
166
  - Stochastic Ghost [[2]](#2),
144
167
  - SSL-ALM [[3]](#3),
145
168
  - Stochastic Switching Subgradient [[4]](#4).
146
169
 
147
170
  To reproduce the experiments of the paper, run the following:
148
- ``` python
171
+
172
+ ```
149
173
  cd experiments
150
174
  python run_folktables.py data=folktables alg=sslalm
151
175
  python run_folktables.py data=folktables alg=alm
@@ -154,23 +178,25 @@ python run_folktables.py data=folktables alg=ssg
154
178
  python run_folktables.py data=folktables alg=sgd # baseline, no fairness
155
179
  python run_folktables.py data=folktables alg=fairret # baseline, fairness with regularizer
156
180
  ```
181
+
157
182
  Each command will start 10 runs of the `alg`, 30 seconds each.
158
183
  The results will be saved to `experiments/utils/saved_models` and `experiments/utils/exp_results`.
159
184
  <!-- In the repository, we include the configuration needed to reproduce the experiments in the paper. To do so, go to `experiments` and run `python run_folktables.py data=folktables alg=sslalm`. -->
160
185
  <!-- Repeat for the other algorithms by changing the `alg` parameter. -->
161
186
 
162
- This repository uses [Hydra](https://hydra.cc/) to manage parameters; see `experiments/conf` for configuration files.
163
- * To change the parameters of the experiment, such as the number of runs for each algorithm, run time, the dataset used (*note: for now supports only Folktables*) - use `experiment.yaml`.
164
- * To change the dataset settings - such as file location - or do dataset-specific adjustments - such as the configuration of the protected attributes - use `data/{dataset_name}.yaml`
165
- * To change algorithm hyperparameters, use `alg/{algorithm_name}.yaml`.
166
- * To change constraint hyperparameters, use `constraint/{constraint_name}.yaml`
187
+ This repository uses [Hydra](https://hydra.cc/) to manage parameters; see `experiments/conf` for configuration files.
188
+
189
+ - To change the parameters of the experiment, such as the number of runs for each algorithm, run time, the dataset used (*note: for now supports only Folktables*) - use `experiment.yaml`.
190
+ - To change the dataset settings - such as file location - or do dataset-specific adjustments - such as the configuration of the protected attributes - use `data/{dataset_name}.yaml`
191
+ - To change algorithm hyperparameters, use `alg/{algorithm_name}.yaml`.
192
+ - To change constraint hyperparameters, use `constraint/{constraint_name}.yaml`
167
193
 
168
194
  <!-- ; it is installed as one of the dependencies. -->
169
195
  <!-- To learn more about using Hydra, please check out the [official tutorial](https://hydra.cc/docs/tutorials/basic/your_first_app). -->
170
196
 
171
197
  ### Producing plots
172
- The plots and tables like the ones in the paper can be produced using the two notebooks. `experiments/algo_plots.ipynb` houses the convergence plots, and `experiments/model_plots.ipynb` - all the others.
173
198
 
199
+ The plots and tables like the ones in the paper can be produced using the two notebooks. `experiments/algo_plots.ipynb` houses the convergence plots, and `experiments/model_plots.ipynb` - all the others.
174
200
 
175
201
  ## License and terms of use
176
202
 
@@ -180,7 +206,7 @@ The benchmark part of the package relies on the Folktables package, provided und
180
206
  It provides code to download data from the American Community Survey
181
207
  (ACS) Public Use Microdata Sample (PUMS) files managed by the US Census Bureau.
182
208
  The data itself is governed by the terms of use provided by the Census Bureau.
183
- For more information, see https://www.census.gov/data/developers/about/terms-of-service.html
209
+ For more information, see <https://www.census.gov/data/developers/about/terms-of-service.html>
184
210
 
185
211
  <!-- ## Cite this work -->
186
212
 
@@ -206,7 +232,7 @@ For more information, see https://www.census.gov/data/developers/about/terms-of-
206
232
 
207
233
  If you use this work, we encourage you to cite [our paper](https://arxiv.org/abs/2507.04033),
208
234
 
209
- ```
235
+ ```bibtex
210
236
  @misc{kliachkin2025benchmarkingstochasticapproximationalgorithms,
211
237
  title={Benchmarking Stochastic Approximation Algorithms for Fairness-Constrained Training of Deep Neural Networks},
212
238
  author={Andrii Kliachkin and Jana Lepšová and Gilles Bareilles and Jakub Mareček},
@@ -218,14 +244,14 @@ If you use this work, we encourage you to cite [our paper](https://arxiv.org/abs
218
244
  }
219
245
  ```
220
246
 
221
- <a id="1">[1]</a>
247
+ <a id="1">[1]</a>
222
248
  Ding, Hardt & Miller et al. (2021) Retiring Adult: New Datasets for Fair Machine Learning, Curran Associates, Inc..
223
249
 
224
- <a id="2">[2]</a>
250
+ <a id="2">[2]</a>
225
251
  Facchinei & Kungurtsev (2023) Stochastic Approximation for Expectation Objective and Expectation Inequality-Constrained Nonconvex Optimization, arXiv.
226
252
 
227
- <a id="3">[3]</a>
253
+ <a id="3">[3]</a>
228
254
  Huang, Zhang & Alacaoglu (2025) Stochastic Smoothed Primal-Dual Algorithms for Nonconvex Optimization with Linear Inequality Constraints, arXiv.
229
255
 
230
- <a id="4">[4]</a>
256
+ <a id="4">[4]</a>
231
257
  Huang & Lin (2023) Oracle Complexity of Single-Loop Switching Subgradient Methods for Non-Smooth Weakly Convex Functional Constrained Optimization, Curran Associates Inc..
@@ -6,22 +6,23 @@ The toolkit implements algorithms for constrained training of neural networks ba
6
6
  <!-- , as well as a tool to compare stochastic-constrained stochastic optimization algorithms on a _fair learning_ task in the `experiments` folder. -->
7
7
 
8
8
  ## Table of Contents
9
+
9
10
  1. [Basic installation instructions](#basic-installation-instructions)
10
11
  2. [Using the toolkit](#using-the-toolkit)
11
- 3. [Extending the toolkit](#extending-the-toolkit)
12
+ 3. [Extending the toolkit](#extending-the-toolkit)
12
13
  4. [Reproducing the Benchmark](#reproducing-the-benchmark)
13
14
  5. [License and terms of use](#license-and-terms-of-use)
14
15
  6. [References](#references)
15
16
 
16
17
  humancompatible-train is still under active development! If you find bugs or have feature
17
18
  requests, please file a
18
- [Github issue](https://github.com/humancompatible/train/issues).
19
+ [Github issue](https://github.com/humancompatible/train/issues).
19
20
 
20
21
  ## Installation
21
22
 
22
23
  Use
23
24
 
24
- ```
25
+ ```bash
25
26
  pip install humancompatible-train
26
27
  ```
27
28
 
@@ -31,11 +32,11 @@ The only dependencies of this package are `numpy` and `torch`.
31
32
 
32
33
  The toolkit implements algorithms for constrained training of neural networks based on PyTorch.
33
34
 
34
- The algorithms follow the `dual_step()` - `step()` framework: taking inspiration from PyTorch, the `double_step` does updates related to the dual parameters and prepares for the primal update (by, e.g., saving constraint gradients), and `step()` updates the primal parameters.
35
+ The algorithms follow the `dual_step()` - `step()` framework: taking inspiration from PyTorch, the `dual_step()` does updates related to the dual parameters and prepares for the primal update (by, e.g., saving constraint gradients), and `step()` updates the primal parameters.
35
36
 
36
37
  In general, your code using `humancompatible-train` would look something like this:
37
38
 
38
- ```
39
+ ```python
39
40
  for inputs, labels in dataloader:
40
41
  # inference
41
42
  outputs = model(inputs)
@@ -54,6 +55,7 @@ for inputs, labels in dataloader:
54
55
  ```
55
56
 
56
57
  Our idea is to
58
+
57
59
  1. Deviate minimally from the usual PyTorch workflow
58
60
  2. Make different stochastic-constrained stochastic optimization algorithms nearly interchangable in the code.
59
61
 
@@ -61,6 +63,12 @@ Our idea is to
61
63
 
62
64
  You are invited to check out our new API presented in notebooks in the `examples` folder.
63
65
 
66
+ The example notebooks have additional dependencies, such as `fairret`. To install those, run
67
+
68
+ ```
69
+ pip install humancompatible-train[examples]
70
+ ```
71
+
64
72
  *The legacy API used for the benchmark is presented in `examples/_old_/algorithm_demo.ipynb` and `examples/_old_/constraint_demo.ipynb`.*
65
73
 
66
74
  ## Extending the toolkit
@@ -74,21 +82,27 @@ You are invited to check out our new API presented in notebooks in the `examples
74
82
  The code used in [our benchmark paper](https://arxiv.org/abs/2507.04033) is not migrated to the new API yet (WIP).
75
83
 
76
84
  ### Basic installation instructions
85
+
77
86
  The code requires Python version ```3.11```.
78
87
 
79
88
  1. Create a virtual environment
80
89
 
81
90
  **bash** (Linux)
91
+
82
92
  ```
83
93
  python3.11 -m venv fairbenchenv
84
94
  source fairbenchenv/bin/activate
85
95
  ```
96
+
86
97
  **cmd** (Windows)
98
+
87
99
  ```
88
100
  python -m venv fairbenchenv
89
101
  fairbenchenv\Scripts\activate.bat
90
102
  ```
103
+
91
104
  2. Install from source.
105
+
92
106
  ```
93
107
  git clone https://github.com/humancompatible/train.git
94
108
  cd train
@@ -97,11 +111,12 @@ pip install .
97
111
  ```
98
112
 
99
113
  If you wish to edit the code of the algorithms, install as an editable package:
114
+
100
115
  ```
101
116
  pip install -e .
102
117
  ```
103
118
 
104
- __Warning__: it is recommended to use Stochastic Ghost with the mkl-accelerated version of the scipy package with Stochastic Ghost; to install it, run
119
+ **Warning**: it is recommended to use Stochastic Ghost with the mkl-accelerated version of the scipy package with Stochastic Ghost; to install it, run
105
120
 
106
121
  ```pip install --force-reinstall -i https://software.repos.intel.com/python/pypi scipy```
107
122
 
@@ -115,12 +130,14 @@ after installing requirements.txt; otherwise, the algorithm will run slower. How
115
130
  ### Running the algorithms
116
131
 
117
132
  The benchmark comprises the following algorithms:
133
+
118
134
  - Stochastic Ghost [[2]](#2),
119
135
  - SSL-ALM [[3]](#3),
120
136
  - Stochastic Switching Subgradient [[4]](#4).
121
137
 
122
138
  To reproduce the experiments of the paper, run the following:
123
- ``` python
139
+
140
+ ```
124
141
  cd experiments
125
142
  python run_folktables.py data=folktables alg=sslalm
126
143
  python run_folktables.py data=folktables alg=alm
@@ -129,23 +146,25 @@ python run_folktables.py data=folktables alg=ssg
129
146
  python run_folktables.py data=folktables alg=sgd # baseline, no fairness
130
147
  python run_folktables.py data=folktables alg=fairret # baseline, fairness with regularizer
131
148
  ```
149
+
132
150
  Each command will start 10 runs of the `alg`, 30 seconds each.
133
151
  The results will be saved to `experiments/utils/saved_models` and `experiments/utils/exp_results`.
134
152
  <!-- In the repository, we include the configuration needed to reproduce the experiments in the paper. To do so, go to `experiments` and run `python run_folktables.py data=folktables alg=sslalm`. -->
135
153
  <!-- Repeat for the other algorithms by changing the `alg` parameter. -->
136
154
 
137
- This repository uses [Hydra](https://hydra.cc/) to manage parameters; see `experiments/conf` for configuration files.
138
- * To change the parameters of the experiment, such as the number of runs for each algorithm, run time, the dataset used (*note: for now supports only Folktables*) - use `experiment.yaml`.
139
- * To change the dataset settings - such as file location - or do dataset-specific adjustments - such as the configuration of the protected attributes - use `data/{dataset_name}.yaml`
140
- * To change algorithm hyperparameters, use `alg/{algorithm_name}.yaml`.
141
- * To change constraint hyperparameters, use `constraint/{constraint_name}.yaml`
155
+ This repository uses [Hydra](https://hydra.cc/) to manage parameters; see `experiments/conf` for configuration files.
156
+
157
+ - To change the parameters of the experiment, such as the number of runs for each algorithm, run time, the dataset used (*note: for now supports only Folktables*) - use `experiment.yaml`.
158
+ - To change the dataset settings - such as file location - or do dataset-specific adjustments - such as the configuration of the protected attributes - use `data/{dataset_name}.yaml`
159
+ - To change algorithm hyperparameters, use `alg/{algorithm_name}.yaml`.
160
+ - To change constraint hyperparameters, use `constraint/{constraint_name}.yaml`
142
161
 
143
162
  <!-- ; it is installed as one of the dependencies. -->
144
163
  <!-- To learn more about using Hydra, please check out the [official tutorial](https://hydra.cc/docs/tutorials/basic/your_first_app). -->
145
164
 
146
165
  ### Producing plots
147
- The plots and tables like the ones in the paper can be produced using the two notebooks. `experiments/algo_plots.ipynb` houses the convergence plots, and `experiments/model_plots.ipynb` - all the others.
148
166
 
167
+ The plots and tables like the ones in the paper can be produced using the two notebooks. `experiments/algo_plots.ipynb` houses the convergence plots, and `experiments/model_plots.ipynb` - all the others.
149
168
 
150
169
  ## License and terms of use
151
170
 
@@ -155,7 +174,7 @@ The benchmark part of the package relies on the Folktables package, provided und
155
174
  It provides code to download data from the American Community Survey
156
175
  (ACS) Public Use Microdata Sample (PUMS) files managed by the US Census Bureau.
157
176
  The data itself is governed by the terms of use provided by the Census Bureau.
158
- For more information, see https://www.census.gov/data/developers/about/terms-of-service.html
177
+ For more information, see <https://www.census.gov/data/developers/about/terms-of-service.html>
159
178
 
160
179
  <!-- ## Cite this work -->
161
180
 
@@ -181,7 +200,7 @@ For more information, see https://www.census.gov/data/developers/about/terms-of-
181
200
 
182
201
  If you use this work, we encourage you to cite [our paper](https://arxiv.org/abs/2507.04033),
183
202
 
184
- ```
203
+ ```bibtex
185
204
  @misc{kliachkin2025benchmarkingstochasticapproximationalgorithms,
186
205
  title={Benchmarking Stochastic Approximation Algorithms for Fairness-Constrained Training of Deep Neural Networks},
187
206
  author={Andrii Kliachkin and Jana Lepšová and Gilles Bareilles and Jakub Mareček},
@@ -193,14 +212,14 @@ If you use this work, we encourage you to cite [our paper](https://arxiv.org/abs
193
212
  }
194
213
  ```
195
214
 
196
- <a id="1">[1]</a>
215
+ <a id="1">[1]</a>
197
216
  Ding, Hardt & Miller et al. (2021) Retiring Adult: New Datasets for Fair Machine Learning, Curran Associates, Inc..
198
217
 
199
- <a id="2">[2]</a>
218
+ <a id="2">[2]</a>
200
219
  Facchinei & Kungurtsev (2023) Stochastic Approximation for Expectation Objective and Expectation Inequality-Constrained Nonconvex Optimization, arXiv.
201
220
 
202
- <a id="3">[3]</a>
221
+ <a id="3">[3]</a>
203
222
  Huang, Zhang & Alacaoglu (2025) Stochastic Smoothed Primal-Dual Algorithms for Nonconvex Optimization with Linear Inequality Constraints, arXiv.
204
223
 
205
- <a id="4">[4]</a>
206
- Huang & Lin (2023) Oracle Complexity of Single-Loop Switching Subgradient Methods for Non-Smooth Weakly Convex Functional Constrained Optimization, Curran Associates Inc..
224
+ <a id="4">[4]</a>
225
+ Huang & Lin (2023) Oracle Complexity of Single-Loop Switching Subgradient Methods for Non-Smooth Weakly Convex Functional Constrained Optimization, Curran Associates Inc..