-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
301 lines (263 loc) · 18.5 KB
/
index.html
File metadata and controls
301 lines (263 loc) · 18.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-GM4PT3QHSG"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-GM4PT3QHSG');
</script>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="Ben Hull - Software Developer and Security Consultant with expertise in machine learning, API development, and cybersecurity.">
<meta name="author" content="Ben Hull">
<title>BenH - Research Portfolio</title>
<!-- Bootstrap core CSS -->
<link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
<!-- Modern fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Manrope:wght@400;500;600;700;800&display=swap" rel="stylesheet">
<!-- Custom fonts for this template -->
<link href="https://fonts.googleapis.com/css?family=Saira+Extra+Condensed:100,200,300,400,500,600,700,800,900" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,600,600i,700,700i,800,800i" rel="stylesheet">
<link href="vendor/font-awesome/css/font-awesome.min.css" rel="stylesheet">
<link href="vendor/devicons/css/devicons.min.css" rel="stylesheet">
<link href="vendor/simple-line-icons/css/simple-line-icons.css" rel="stylesheet">
<!-- Custom styles for this template -->
<link href="css/resume.css" rel="stylesheet">
</head>
<body id="page-top">
<nav class="navbar navbar-expand-lg navbar-dark bg-primary fixed-top" id="sideNav">
<!-- <a class="navbar-brand js-scroll-trigger" href="#page-top"> -->
<span class="d-block d-lg-none"></span>
<span class="d-none d-lg-block profile-container">
<div class="profile-wrapper">
<img class="img-fluid img-profile rounded-circle mx-auto" src="https://avatars.githubusercontent.com/u/70710385?s=400&u=77fe4e4ef1fae030b0ac73887e3858a4b751d400&v=4" alt="Ben Hull profile picture">
<div class="profile-name">Ben Hull</div>
<div class="profile-title">Software Developer</div>
<ul class="list-inline list-social-icons mb-0 profile-social-icons">
<li class="list-inline-item">
<a href="https://www.linkedin.com/in/ben-h-b93a96204/" aria-label="LinkedIn Profile">
<span class="fa-stack fa-lg">
<i class="fa fa-circle fa-stack-2x"></i>
<i class="fa fa-linkedin fa-stack-1x fa-inverse"></i>
</span>
</a>
</li>
<li class="list-inline-item">
<a href="bluehood-cv-public.pdf" aria-label="Download CV">
<span class="fa-stack fa-lg">
<i class="fa fa-circle fa-stack-2x"></i>
<i class="fa fa-file-text fa-stack-1x fa-inverse"></i>
</span>
</a>
</li>
</ul>
</div>
</span>
<!-- </a> -->
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="#about">About</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="#publications">Publications</a>
</li>
<li class="nav-item">
<a class="nav-link js-scroll-trigger" href="#experience">Research Projects</a>
</li>
</ul>
</div>
</nav>
<div class="d-lg-none mobile-profile-container">
<div class="profile-wrapper">
<img class="img-fluid img-profile rounded-circle mx-auto" src="https://avatars.githubusercontent.com/u/70710385?s=400&u=77fe4e4ef1fae030b0ac73887e3858a4b751d400&v=4" alt="Ben Hull profile picture">
<div class="profile-name">Ben Hull</div>
<div class="profile-title">Software Developer</div>
<ul class="list-inline list-social-icons mb-0 profile-social-icons">
<li class="list-inline-item">
<a href="https://www.linkedin.com/in/ben-h-b93a96204/" aria-label="LinkedIn Profile">
<span class="fa-stack fa-lg">
<i class="fa fa-circle fa-stack-2x"></i>
<i class="fa fa-linkedin fa-stack-1x fa-inverse"></i>
</span>
</a>
</li>
<li class="list-inline-item">
<a href="bluehood-cv-public.pdf" aria-label="Download CV">
<span class="fa-stack fa-lg">
<i class="fa fa-circle fa-stack-2x"></i>
<i class="fa fa-file-text fa-stack-1x fa-inverse"></i>
</span>
</a>
</li>
</ul>
</div>
</div>
<div class="container-fluid p-0">
<section class="resume-section p-3 p-lg-5 d-flex d-column" id="about">
<div class="my-auto">
<h1 class="mb-0">Ben
<span class="text-primary">Hull</span>
</h1>
<br>
<p>A results-driven Software Developer and Security Consultant with expertise in machine learning, API development, and
cybersecurity. Combines strong development experience in Python with deep expertise in transformer architectures and
neural networks. A published researcher with experience implementing robust machine learning solutions, from financial
fraud detection to large language model security. Brings a unique analytical perspective from a Mathematics and Physics
background, with a proven ability to transform complex theoretical concepts into practical solutions.</p>
<!-- Social icons moved to sidebar -->
</div>
</section>
<section class="resume-section p-3 p-lg-5 d-flex flex-column" id="publications">
<div class="my-auto">
<h2 class="mb-5">Publications</h2>
<div class="resume-item d-flex flex-column flex-md-row mb-5">
<div class="resume-content mr-auto">
<h3 class="mb-0">Domain-specific prompt injection detection</h3>
<div class="subheading mb-3">Benjamin Hull and Donato Capitella</div>
<p>Unlike traditional injection attacks, such as SQL injection, where deterministic solutions exist, prompt injection in LLMs operates within the realm of natural language, where there is no clear separation between instructions and data. This makes it challenging to address the issue directly. Instead, the solutions we outlined and that are currently used in the industry rely on approaches that treat the LLM and its outputs as untrusted. These include implementing external authorization controls to limit the scope of actions LLM agents can perform using tools/plugins, sanitizing outputs to remove potentially harmful content, and employing human-in-the-loop oversight to ensure that all actions taken by the LLM are explicitly approved by a human operator. Additionally, we emphasized the importance of sanitizing input in two ways: (1) by reducing the accepted character sets to thwart attackers' attempts to embed malicious instructions, and (2) the detection of potential adversarial prompts by leveraging machine learning models trained to identify signs of injection attempts.</p>
<a class="nav-link" href="https://labs.withsecure.com/publications/detecting-prompt-injection-bert-based-classifier">Domain-specific prompt injection detection, WithSecure Labs, April 2024</a>
</div>
</div>
<div class="resume-item d-flex flex-column flex-md-row mb-5">
<div class="resume-content mr-auto">
<h3 class="mb-0">Using residual heat maps to visualise Benford's multi-digit law</h3>
<div class="subheading mb-3">Benjamin Hull, Alexander Long and Ifan G Hughes</div>
<p>Benford's law, established over a century ago, reveals that the occurrence of the first significant digit in large numerical datasets follows a nonuniform distribution. This counterintuitive nature is useful in forensic accounting and detecting financial fraud. A recent investigation on house price data in England and Wales pre and post-2014 shows two distinct patterns of human intervention: selling property just below tax thresholds and psychological pricing with a bias towards final digits being 0 or 5. The analysis indicates that the 2014 legislative change to soften tax thresholds significantly impacted house price data.</p>
<a class="nav-link" href="https://iopscience.iop.org/article/10.1088/1361-6404/ac3671">Benjamin Hull et al 2022 Eur. J. Phys. 43 015803</a>
</div>
</div>
</div>
</section>
<section class="resume-section p-3 p-lg-5 d-flex flex-column" id="experience">
<div class="my-auto">
<h2 class="mb-5">Research Projects</h2>
<div class="resume-item d-flex flex-column flex-md-row mb-5">
<div class="resume-content mr-auto">
<h3 class="mb-0">Hidden Markov Models for Modeling Market States</h3>
<div class="subheading mb-3">Personal Research</div>
<p>This study investigates the efficacy of a two-state Hidden Markov Model (HMM) in identifying risk-on and risk-off market regimes to enhance portfolio allocation. Utilising a longitudinal dataset of daily S&P 500 returns spanning from 1930 to the present, we characterise two distinct latent states: a low-volatility state associated with higher equity returns and a high-volatility state marked by diminished performance. Our analysis identifies Gold as a robust hedging instrument, maintaining consistent performance across both regimes.</p>
<div class="project-links">
<a class="nav-link js-scroll-trigger" href="/research/benh_Hidden_Markov_Models.pdf">
<i class="fa fa-file-pdf-o" aria-hidden="true"></i> View Research Paper
</a>
</div>
</div>
</div>
<div class="resume-item d-flex flex-column flex-md-row mb-5">
<div class="resume-content mr-auto">
<h3 class="mb-0">Conformity of Time Series to Benford’s Law: Finite Range Formulation and Stochastic Evidence</h3>
<div class="subheading mb-3">Personal Research (Draft)</div>
<p>This paper investigates the applicability of Benford’s Law (BL) to time series data, especially where datasets are constrained to a finite range and may not span several orders of magnitude as traditionally assumed. We develop the mathematical formulation for a 'Finite Range Benford Law' (FRBL) and present closed-form results to quantify digit distributions for such finite settings. Using synthetic datasets and geometric Brownian motion (GBM)—a standard model for stock prices—we demonstrate that while classical BL emerges in the infinite-range limit, finite datasets require the refined FRBL framework. We introduce and apply a practical test statistic to assess conformity, compare analytic expectations with Monte Carlo simulations, and show the rapid convergence of GBM-generated series to the BL/FRBL predictions. These results provide both theoretical and empirical support for using FRBL in quantitative analysis of financial and other time-series data, especially when standard BL assumptions do not hold.</p>
<div class="project-links">
<a class="nav-link js-scroll-trigger" href="/research/benh_bl_finite_range_stochastic.pdf">
<i class="fa fa-file-pdf-o" aria-hidden="true"></i> View Research Paper
</a>
</div>
</div>
</div>
<div class="resume-item d-flex flex-column flex-md-row mb-5">
<div class="resume-content mr-auto">
<h3 class="mb-0">Beyond Evaluation: Learning Contextual Chess Position Representations</h3>
<div class="subheading mb-3">Personal Research</div>
<p>This paper presents ChessLM, a novel Transformer model inspired by self-supervised learning in NLP, designed to create rich vector representations (embeddings) of chess positions. Trained on a large game corpus using tasks like predicting masked pieces and move differences, the model learns to capture high-level thematic similarities such as pawn structures and king safety across different game stages. While analysis indicates limitations for direct position evaluation, the learned embeddings are effective for retrieving similar positions, suggesting applications like intelligent puzzle generation and opening new research directions for chess representation learning beyond traditional evaluation.</p>
<div class="project-links">
<a class="nav-link js-scroll-trigger" href="/research/benh_Beyond_Evaluation__Learning_Contextual_Chess_Position_Representations_2025.pdf">
<i class="fa fa-file-pdf-o" aria-hidden="true"></i> View Research Paper
</a>
<a class="nav-link js-scroll-trigger" href="https://github.com/bluehood/Encoder-ChessLM">
<i class="fa fa-github" aria-hidden="true"></i> GitHub Repository
</a>
</div>
</div>
</div>
<div class="resume-item d-flex flex-column flex-md-row mb-5">
<div class="resume-content mr-auto">
<h3 class="mb-0">Language Translation using the Transformer Architecture</h3>
<div class="subheading mb-3">Personal Research</div>
<p>Implements a translation model using the Transformer architecture, based on the groundbreaking paper "Attention is All You Need" (Vaswani et al., 2017). The implementation focuses on English-to-French translation whilst offering a simple to understand implementation of the architecture in PyTorch.</p>
<div class="project-links">
<a class="nav-link js-scroll-trigger" href="https://colab.research.google.com/github/bluehood/Transformer-Translation/blob/main/Transformer_Translation.ipynb">
<i class="fa fa-external-link" aria-hidden="true"></i> Colab Notebook
</a>
<a class="nav-link js-scroll-trigger" href="https://github.com/bluehood/Transformer-Translation">
<i class="fa fa-github" aria-hidden="true"></i> GitHub Repository
</a>
</div>
</div>
</div>
<div class="resume-item d-flex flex-column flex-md-row mb-5">
<div class="resume-content mr-auto">
<h3 class="mb-0">An Implementation of GPT using Pytorch</h3>
<div class="subheading mb-3">Personal Research</div>
<p>A from-scratch implementation of the GPT (Generative Pre-trained Transformer) architecture using PyTorch. The implementation focuses on understanding the core components of the transformer architecture and its application to language modeling.</p>
<div class="project-links">
<a class="nav-link js-scroll-trigger" href="https://colab.research.google.com/github/bluehood/GPT-Implementation/blob/main/GPT_Implementation.ipynb">
<i class="fa fa-external-link" aria-hidden="true"></i> Colab Notebook
</a>
<a class="nav-link js-scroll-trigger" href="https://github.com/bluehood/GPT-Implementation/">
<i class="fa fa-github" aria-hidden="true"></i> GitHub Repository
</a>
</div>
</div>
</div>
<div class="resume-item d-flex flex-column flex-md-row mb-5">
<div class="resume-content mr-auto">
<h3 class="mb-0">Can Benford's law be used to detect financial fraud?</h3>
<div class="subheading mb-3">Durham University Physics Level 4 Project</div>
<p>Benford's law (BL) describes the probability of a given digit occurring at a position (index) in a number. By analysing financial statements and other documents and measuring conformity with this law, it is could be possible to detect financial fraud. This project focuses on house price data, techniques used to measure conformity and SEC filling to determine how this law could be used to detect financial fraud.</p>
<a class="nav-link js-scroll-trigger" href="/research/benh_benfords-law-financial-fraud_2021.pdf">
<i class="fa fa-file-pdf-o" aria-hidden="true"></i> View Research Paper
</a>
</div>
</div>
</div>
</section>
</div>
<!-- Bootstrap core JavaScript -->
<script src="vendor/jquery/jquery.min.js"></script>
<script src="vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
<!-- Plugin JavaScript -->
<script src="vendor/jquery-easing/jquery.easing.min.js"></script>
<!-- Custom scripts for this template -->
<script src="js/resume.min.js"></script>
<!-- Intersection Observer for animations -->
<script>
document.addEventListener('DOMContentLoaded', function() {
// Animate elements when they come into view
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('visible');
observer.unobserve(entry.target);
}
});
}, {
threshold: 0.1
});
// Observe all resume items
document.querySelectorAll('.resume-item, .resume-content').forEach(item => {
observer.observe(item);
});
// Add hover effect to navigation links
const navLinks = document.querySelectorAll('.nav-link.js-scroll-trigger');
navLinks.forEach(link => {
link.addEventListener('mouseenter', () => {
link.style.transform = 'translateX(5px)';
});
link.addEventListener('mouseleave', () => {
link.style.transform = 'translateX(0)';
});
});
});
</script>
</body>
</html>